Получение результатов запросов с помощью ajax

unnamed777

Новичок
Получение результатов запросов с помощью ajax

Необходимо получать результаты запросов к php скрипту с помощью ajax. Причем запросы могут выполняться различное время - необязательно первый пришедший ответ от скрипта будет являться результатом первого отправленного запроса. Например, отправлены запрос1 и через несколько секунд - запрос2. Запрос2 выполнился быстрее запроса1 => результат2 пришел раньше, чем результат1. Но почему-то оба результата возвращаются одинаковыми. Вот js:
PHP:
var req;

function loadXMLDoc(url) 
{
 if (window.XMLHttpRequest) 
 {
  req = new XMLHttpRequest();
  req.onreadystatechange = processReqChange;
  req.open("GET", url, true);
  req.send(null);
 } else if (window.ActiveXObject) 
 {
  req = new ActiveXObject("Microsoft.XMLHTTP");
  if (req) 
  {
   req.onreadystatechange = processReqChange;
   req.open("GET", url, true);
   req.send();
  }
 }
}

function processReqChange() 
{
//alert(req.readyState);
 // only if req shows "complete"
 if (req.readyState == 4) 
 {
  // only if "OK"
  if (req.status == 200) 
  {
   // ...processing statements go here...
   response = req.responseXML.documentElement;
   method = response.getElementsByTagName('method')[0].firstChild.data;
   result = response.getElementsByTagName('result')[0].firstChild.data;
   alert(result);
   //eval(method + '(\'\', result)');
  } 
  else 
  {
   alert("Произошла ошибка при получении XML данных:" + req.statusText);
  }
 }
}

function sendquery(input, response)
{
  // Input mode
  url  = 'http://dl.localhost/cp/test.php?' + Math.random();
  loadXMLDoc(url);
}
test.php:
PHP:
<?php

sleep(rand(0, 5));
header('Content-Type: text/xml');
header('Pragma: no-cache');
print '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
print '<response>
<method>checkName</method>
<result>asdf, '.$_SERVER['QUERY_STRING'].'</result>
</response>';

?>
Если вызвать sendquery() дважды, то alert() из processReqChange() вызывается три раза непонятно по какой причине. Причем в этом алерте все три раза отображается последний результат запроса.
Можно ли как-нибудь реализовать поставленную задачу? На ум приходит только создание массива объектов XMLHttpRequest: один объект - один запрос - один результат(и получится ли вообще так сделать?)... Мжоно ли сделать это как-то иначе?
 

serglt

Анус, ой, Ахтунг
дык а как ты думаешь у тебя два запроса произойдут в один и тот же момент паралельно, если у тебя один объект для отправки?
 

unnamed777

Новичок
Паралленьно они зайти не смогут. ПРийдут они в разное время. Только не факт что результат первого запроса и вернется первым. Он может вернуться после второго-третьего результатов
 

unnamed777

Новичок
Т.е. сделать это можно только используя массив таких объектов?
 

serglt

Анус, ой, Ахтунг
Дык пчеловод, ты отправил свой req на xxx.php ждешь пока там что то вернется, не дождавшись ответа ты этот же req отправляешь на yyy.php. А теперь внимание вопрос!!! Какой результат у ты хочешь уведить? От перенаправленного объекта. Если тебе папа сказала - сходи в продуктовый за хлебом, а потом сказал - нет сходи в воноводочный за водкой, то хлеба ты уже не принесешь.

-~{}~ 29.01.07 16:10:

Массив не массив - это как тебе удобно
 

unnamed777

Новичок
Гг, да понял уже))

Массив не массив - это как тебе удобно
А как еще можно? Если массив, то это ж в processReqChange() придется по всем элементам пробегаться. Есть более оптимальный способ?
 

serglt

Анус, ой, Ахтунг
processReqChange() в ней - земенить
req на this или вообще
req.onreadystatechange = processReqChange; заменить на
req.onreadystatechange = function () {
response = this.responseXML.documentElement;
...
}
 
Сверху