AJAX запрос цикла PHP-скрипта - PullRequest
       8

AJAX запрос цикла PHP-скрипта

1 голос
/ 29 августа 2011

Я искал похожие темы, но, похоже, ни одна из них не решает проблему, с которой я столкнулся в настоящее время. У меня есть этот JavaScript:

<script type="text/javascript">

                http = new XMLHttpRequest();

                function fetch()
                {

                    http.open("GET", "script.php", true);
                    http.onreadystatechange = useHttpResponse;
                    http.send(null);

                }

                function useHttpResponse()
                {

                    if(http.readyState == 4)
                    {

                            var textout = http.responseText;
                            document.getElementById("ajax").innerHTML=textout;

                    }

                }

</script>

Очень простые вещи. PHP-скрипт представляет собой простой цикл:

for($i = 0; $i < 30000; $i++)
{

      echo 'Hello<br />';

}

Это прекрасно работает. Я нажимаю кнопку, которая имеет onClick="javascript:fetch()" и она запрашивает PHP-скрипт и выводит 30 000 строк «Hello» в div с идентификатором «ajax».

Проблема в том, что он должен ждать, пока он не запустит все 30 000 циклов. Я хочу, чтобы он выводил ответ через AJAX-запрос после КАЖДОГО цикла, чтобы список расширялся при выполнении скрипта. Это возможно? Как бы я это сделал? Как я уже сказал, я искал, но пришел пустой. Я понимаю, что это чисто косметический эффект, но я был бы признателен за любые советы!

Спасибо

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

отключите буферизацию вывода в ваших настройках PHP или вызывайте http://www.php.net/manual/en/function.flush.php после каждой итерации.

Как указал Майк.в вашем XHR onreadystatechange вы проверяете на status == 4, что означает, что все данные были переданы.Вы должны проверить на status == 3, что означает The request is in process; often some partial data is available from the response, but the server isn't finished with its response.

Майк также указал, что, если ваш сервер настроен на использование сжатия, тогда весь вывод не должен буферизироваться, и вы не можете передавать потоковое содержимое HTML.

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

Нет, это невозможно.Вы не можете получить данные во время работы скрипта, даже если какой-то вывод был отправлен.AJAX может читать только полный результат.

См. Вопрос, который я задал по этому вопросу: Длинные опросы / потоковая передача HTTP Общие вопросы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...