unnamed777
Новичок
Получение результатов запросов с помощью ajax
Необходимо получать результаты запросов к php скрипту с помощью ajax. Причем запросы могут выполняться различное время - необязательно первый пришедший ответ от скрипта будет являться результатом первого отправленного запроса. Например, отправлены запрос1 и через несколько секунд - запрос2. Запрос2 выполнился быстрее запроса1 => результат2 пришел раньше, чем результат1. Но почему-то оба результата возвращаются одинаковыми. Вот js:
test.php:
Если вызвать sendquery() дважды, то alert() из processReqChange() вызывается три раза непонятно по какой причине. Причем в этом алерте все три раза отображается последний результат запроса.
Можно ли как-нибудь реализовать поставленную задачу? На ум приходит только создание массива объектов XMLHttpRequest: один объект - один запрос - один результат(и получится ли вообще так сделать?)... Мжоно ли сделать это как-то иначе?
Необходимо получать результаты запросов к 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);
}
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>';
?>
Можно ли как-нибудь реализовать поставленную задачу? На ум приходит только создание массива объектов XMLHttpRequest: один объект - один запрос - один результат(и получится ли вообще так сделать?)... Мжоно ли сделать это как-то иначе?