Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XMLHttpRequest + передачя тегов 
:(
    Опции темы
chiffa
Дата 13.11.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Добрый день всем, использую аджакс через XMLHttpRequest 

тоесть из index.php через 2.js в table.php идет запрос, обработка и дальнейший вывод. Так вот суть задачи: в table.php выводятся инфа из базы данных в виде таблици, вопрос как передать теги? если стандартно <table> <tr> <td></td> </tr>  </table> то выдает ошибку. Делал таким образом &lt;table&gt; &lt;tr&gt; &lt;td&gt; &lt;/td&gt; $x &lt;/tr&gt;  &lt;/table&gt; все выводится на ура, но почему то только первые 10 записей из базы, всего же их около 100. Если делал обічній вывод типа $x."&lt;<br>&gt" то выводится все 100. Подскажите в чем проблема и как вообще подобное лучьше всего реализовать. код 2.js:

Код

var xmlHttp1 = createXmlHttpRequestObject1();
// retrieves the XMLHttpRequest object
function createXmlHttpRequestObject1()
{

  // will store the reference to the XMLHttpRequest object
  var xmlHttp1;
  // if running Internet Explorer
  if(window.ActiveXObject)
  {
    try
    {
      xmlHttp1 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
      xmlHttp1 = false;
    }
  }
  // if running Mozilla or other browsers
  else
  {
    try
    {
      xmlHttp1 = new XMLHttpRequest();
    }
    catch (e)
    {
      xmlHttp1 = false;
    }
  }

    // return the created object or display an error message
  if (!xmlHttp1)
   alert("Error creating the XMLHttpRequest object.");
  else
    return xmlHttp1;

}

// make asynchronous HTTP request using the XMLHttpRequest object
function process_mfo(make)
{
  // proceed only if the xmlHttp object isn't busy
  if (xmlHttp1.readyState == 4 || xmlHttp1.readyState == 0)
  {

    ssd=0;
    // retrieve the name typed by the user on the form
  //  mfo1 = encodeURIComponent(document.getElementById("myName").value);

sxsss = encodeURIComponent(document.getElementById("sx").value);

    // execute the quickstart.php page from the server
    xmlHttp1.open("GET", "table.php?what_make=" + make + "&sx_ft=" + sxsss, true);
    // define the method to handle server responses
    xmlHttp1.onreadystatechange = handleServerResponse1;
    // make the server request
    xmlHttp1.send(null);
  }
  else
    // if the connection is busy, try again after one second
    setTimeout('process_mfo()', 1000);
}

// executed automatically when a message is received from the server
function handleServerResponse1()
{
  // move forward only if the transaction has completed
  if (xmlHttp1.readyState == 4)
  {
    // status of 200 indicates the transaction completed successfully
    if (xmlHttp1.status == 200)
    {
      // extract the XML retrieved from the server
      xmlResponse1 = xmlHttp1.responseXML;
      // obtain the document element (the root element) of the XML structure
      xmlDocumentElement1 = xmlResponse1.documentElement;
      // get the text message, which is in the first child of
      // the the document element
      helloMessage1 = xmlDocumentElement1.firstChild.data;
      // update the client display using the data received from the server

var mk1 = helloMessage1.split('```');

  document.getElementById("divMessage").innerHTML = mk1 [1];

var er1 = helloMessage1.split('***');



 document.getElementById("sx").value = mk1 [0];


      // restart sequence

    }
    // a HTTP status different than 200 signals an error
    else
    {
      alert("There was a problem accessing the server: " +
xmlHttp1.statusText);
    }
  }

}


PM MAIL   Вверх
solenko
Дата 13.11.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Если отдаете то зачем использовать responseXML? Пользуйтесь responseText


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
chiffa
Дата 13.11.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Спасибо за ответ! просто поменять: responseXML на responseText? Поменял - престало вообще что либо выводить
PM MAIL   Вверх
bars80080
Дата 13.11.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



дофига много чего написано, главное непонятно зачем.
совет правильный, пхп-скрипт отдаёт не валидный xml, а кусок обычной раметки, поэтому надо использовать responseText.
то что дальше не работает - надо смотреть в обработке

либо сделать проще http://forum.vingrad.ru/index.php?show_typ...or=entry1685574
PM MAIL WWW   Вверх
chiffa
Дата 13.11.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Спасибо огромное! огромный тебе респект! Спасаешь уже много раз! smile  smile  smile 
PM MAIL   Вверх
chiffa
Дата 14.11.2008, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



И еще вопросик, может подскажет кто. Если в table.php есть JavaScript код, то почему то не выполняется после асинхронной загрузки. К примеру этот:

Код

<script language='JavaScript'>
function ck()
{
alert ('fff');
}
</script>


<a href='JavaScript:ck ();'>dddddd</a>


Подскажите, кто знает в чем трабл...

Добавлено через 8 минут и 34 секунды
так работает на ура: <a href='JavaScript:alert ("fff");'>dddddd</a>, но если функция будет довольно емкая, то будет не эститично smile
PM MAIL   Вверх
chiffa
Дата 17.11.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



никто незнает?...
PM MAIL   Вверх
bars80080
Дата 17.11.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



если не ошибаюсь, скрипты надо мутить с помощью appendChild. т.е. напрямую добавляя к DOMу, а затем меняя ему .src
наверно можно отследить с помощью onload загрузку и тогда функции будут доступны

но это наобум
PM MAIL WWW   Вверх
ksnk
Дата 17.11.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



chiffa, Вот тут одно из решений.
Основная мысль - из полученого html'я нужно выгрести весь <script/> и потом уже вручную его за'eval'ить. Иначе получается не особенно кроссброузерно.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 18.11.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



спасибо за оветы, но что то не получается разобраться что и как.

ksnk, может подскажешь как выцепить скрипты из хтмл и как с помощью evel их потом залить?... буду весьма признателен
PM MAIL   Вверх
ksnk
Дата 18.11.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Хм... Вообще-то код по моей ссылке действительно несколько неработоспособен :-( 
Методом упрощения удалось привести его к состоянию, когда оно заработало, правда при этом утерялась суть того метода выполнения скриптов, ну да не в этом , в общем-то, сейчас суть...

appendData - добавляет строку data_str в контейнер parent_node. Если нужно добавить к содержимому контейнера - третий параметр- "append", иначе содержимое контейнера замениться.

Мастерилось на коленке, но, вроде, должно работать. 
Код

function appendData(data_str, parent_node, mode)
{
    appendData.js_store='';
   
    data_str =data_str.replace(/<script.*?>((.|[\r\n])*?)<\/script>/ig,appendData.handle);

    //вставляем получившийся текст с метками
    if(parent_node)
      if (mode == 'append') {
        parent_node.innerHTML += data_str;
      } else {
        parent_node.innerHTML = data_str;
      } 
    if(!!appendData.js_store)
    try{ 
       // alert(appendData.js_store) ;
        if(window.execScript) { 
            window.execScript(appendData.js_store, "javascript"); 
        } else {
            eval(appendData.js_store)
        }
    } catch(e){}; // в целях отладки - блок нужно убрать!!!!
}
appendData.handle=function($0,$1)
{
    appendData.js_store+='\n'+$1; // собираем JS в едину кучу
    return '';
}

// appendData(document.body.innerHTML); // не раскомментировать эту строчку !!! :-)



Это сообщение отредактировал(а) ksnk - 18.11.2008, 19:36


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 18.11.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



спасибо за помощь, но что то не работает, я вставил функцию в js-файл, дальше примени:

document.getElementById("ziel").innerHTML = appendData(mk1 [1]); и выводит undefined пробывал
 так appendData(document.getElementById("ziel").innerHTML) = mk1 [1];, может я что то недопоял, не выводит вообще ничего. вот сам код js-файла

Код


function appendData(data_str, parent_node, mode)
{
    appendData.js_store='';

    data_str =data_str.replace(/<script.*?>((.|[\r\n])*?)<\/script>/ig,appendData.handle);
    //вставляем получившийся текст с метками
    if(parent_node)
      if (mode == 'append') {
        parent_node.innerHTML += data_str;
      } else {
        parent_node.innerHTML = data_str;
      }
    if(!!appendData.js_store)
    try{
       // alert(appendData.js_store) ;
        if(window.execScript) {
            window.execScript(appendData.js_store, "javascript");
        } else {
            eval(appendData.js_store)
        }
    } catch(e){}; // в целях отладки - блок нужно убрать!!!!
}
appendData.handle=function($0,$1)
{
    appendData.js_store+='\n'+$1; // собираем JS в едину кучу
    return '';
}
// appendData(document.body.innerHTML); // не раскомментировать эту строчку !!! :-)

function changespecial(x) {
    var dpar = '<? echo time(); ?>';
    if(window.XMLHttpRequest) {
        try { req = new XMLHttpRequest(); }
        catch (e){}}
    else if(window.ActiveXObject) {
        try { req = new ActiveXObject('Msxml2.XMLHTTP'); }
        catch (e){ req = new ActiveXObject('Microsoft.XMLHTTP'); }}
    req.onreadystatechange = function() {
        if(req.readyState == 4) ajax_o(req.responseText); }


    sxsss = encodeURIComponent(document.getElementById("sx").value);

    req.open("GET", 'platej.cff?what_make=' + x + '&sx_ft=' + sxsss, true);
    req.send('');
}
function ajax_o(x) {

var mk1 = decodeURIComponent(x).split('```');

document.getElementById("sx").value = mk1 [0];

  document.getElementById("ziel").innerHTML = appendData(mk1 [1]);


}

PM MAIL   Вверх
chiffa
Дата 23.11.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



up smile
PM MAIL   Вверх
ksnk
Дата 24.11.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



appendData - процедура, которая выполняется не сразу, а сначала неспешно получит от сервера ответ, потом уже его обработает и вставит в innerHTML элемента, переданного вторым параметром.

возможно, было бы правильнее написать 
Код

...
  appendData(mk1 [1], document.getElementById("ziel"));
}




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 24.11.2008, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



не-а.... не работает... переданые скрипты не выполняются...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.