Получение результатов запросов с помощью 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: один объект - один запрос - один результат(и получится ли вообще так сделать?)... Мжоно ли сделать это как-то иначе?
 
дык а как ты думаешь у тебя два запроса произойдут в один и тот же момент паралельно, если у тебя один объект для отправки?
 
Паралленьно они зайти не смогут. ПРийдут они в разное время. Только не факт что результат первого запроса и вернется первым. Он может вернуться после второго-третьего результатов
 
Дык пчеловод, ты отправил свой req на xxx.php ждешь пока там что то вернется, не дождавшись ответа ты этот же req отправляешь на yyy.php. А теперь внимание вопрос!!! Какой результат у ты хочешь уведить? От перенаправленного объекта. Если тебе папа сказала - сходи в продуктовый за хлебом, а потом сказал - нет сходи в воноводочный за водкой, то хлеба ты уже не принесешь.

-~{}~ 29.01.07 16:10:

Массив не массив - это как тебе удобно
 
Гг, да понял уже))

Массив не массив - это как тебе удобно
А как еще можно? Если массив, то это ж в processReqChange() придется по всем элементам пробегаться. Есть более оптимальный способ?
 
processReqChange() в ней - земенить
req на this или вообще
req.onreadystatechange = processReqChange; заменить на
req.onreadystatechange = function () {
response = this.responseXML.documentElement;
...
}
 
Сверху