Как я могу получить данные мгновенно с помощью AJAX? - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь мгновенно получить данные с помощью ajax, но не смог.Проблема в том, что, когда я делаю запрос, ответ приходит к концу процесса php.Я хочу получать данные после каждой команды эха.Итак, вот простой пример.Существует два файла: основной HTML-файл (включая JavaScript) и PHP-файл.

try.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Get Data</title>
<script type="text/javascript">
function makeObject() {
    var newObject;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        newObject = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else {
        newObject = new XMLHttpRequest();
    }
    if (newObject.overrideMimeType) {
        newObject.overrideMimeType('text/xml; charset=UTF-8;');
    }   
    return newObject;
}

var newOne=makeObject();

function getData()
{
    newOne.open('get','process.php',true);
    newOne.onreadystatechange=function(){
        if (newOne.readyState==4)
        {
            var box=document.getElementById("queryResult");
            box.innerHTML=newOne.responseText;
        }
    }
    newOne.send(null);
}
</script>
</head>    
<body>
<input type="button" id="doit" value="Start Query" onclick="getData();" />
<div id="queryResult"></div>
</body>
</html>

и process.php

<?php
echo "1";
sleep(1);
echo "2";
sleep(1);
echo "3";
sleep(1);
echo "4";
sleep(1);
echo "5";
?>

при нажатиикнопка Start Query, она ждет 4 секунды, а затем пишет 12345 одновременно.Я хочу написать 1 и ждать 1 секунду, затем написать 2 и ждать 1 секунду, затем написать 3 и т. Д. Как я могу это сделать?Извините за мой английский, спасибо за ответы:)

Ответы [ 5 ]

0 голосов
/ 31 августа 2011

Если я понимаю ваш вопрос, вам нужно будет сделать 4 вызова ajax-метода. Так как вы ожидаете разные значения от каждого вызова, вам нужно где-то сохранить состояние (на клиенте или сервере), чтобы вы знали, какой вызов вы используете. Если паузы в вашем образце являются частью вашей предполагаемой программы (и не только для примера), то, вероятно, будет лучше в вашем Javascript на стороне клиента.

0 голосов
/ 31 августа 2011

ваш код делает именно то, что вы просите.Ответ ajax предоставляется вам на стороне клиента, когда последний байт получен не так, как он получен.

если вы хотите, чтобы на стороне клиента появлялся прогресс на стороне клиента, тогда клиент должен выполнить опроссервер поддерживает некоторое состояние для ответа, а не то, что оно есть у сервера, пытающегося отправить потоковый ответ.Новые сокеты на стороне клиента HTML5 могут помочь вам здесь, где сервер может вызывать вместо опроса клиента

0 голосов
/ 31 августа 2011

ajax ожидает ответа, поэтому вы ожидаете окончательного ответа.вам придется делать отдельные запросы.Возможно установить последующий запрос в зависимости от результата предыдущего (ых).

0 голосов
/ 31 августа 2011

Вам необходимо использовать веб-сокет html5. Использование стандартного ajax не вернется, пока запрос не будет выполнен.

0 голосов
/ 31 августа 2011

Серверы буферизуют свой вывод - отправка одного символа чрезвычайно затратна для сетевых ресурсов. Чтобы заставить PHP и веб-сервер очищать свои буферы, вам нужно как минимум:

echo "1";
flush();
ob_flush();
echo "2";
etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...