я могу увидеть, какие данные загружаются во время выполнения ajax-запроса? - PullRequest
1 голос
/ 02 апреля 2011

если у меня есть что-то подобное в php

$foo=0;
while($foo<20){
echo "hello";
usleep(1000000);
$foo=$foo+1;
}

и я делаю ajax-запрос к этому файлу php, могу ли я что-нибудь сделать с данными во время выполнения запроса?Я имею в виду, что сценарий выдает привет каждую секунду, и я увидел, что запрос показывает только те данные, которые у него есть, когда завершается весь цикл, поэтому нет ли способа получить доступ к каждому привету, когда его выводит эхо?

Ответы [ 4 ]

0 голосов
/ 02 апреля 2011

Правильный ответ: вы МОЖЕТЕ видеть контент, пока он возвращается.Другие ответы были частично правильными, упомянув, что выходной буфер PHP будет держать вывод «в бутылках» ... но выходной буфер можно отключить.

После отключения выходного буфера вам нужно показать JQueryответ до завершения запроса - вы делаете это, периодически обновляя браузер, пока соединение с сервером все еще активно.Эта концепция называется «Комета» или «Длинный опрос».

См. Следующие вопросы:

Комета и JQuery

Как мнереализовать базовый «длинный опрос»?

Comet In PHP

0 голосов
/ 02 апреля 2011

Есть несколько причин, почему вы не можете это увидеть.

Содержимое, полученное из запроса AJAX, обрабатывается сервером, как и любой другой запрос http / php.

Что происходит, так это то, что данные кэшируются буфером php, а затем по окончании сбрасывают его на выход. Какой апач вам тогда поставит.

Существует так мало данных, что нет необходимости очищать этот буфер перед выполнением процессов. Таким образом, вы видите только конечный результат.

Если у вас было выведено много данных, которые приводят к тому, что вывод сбрасывается раньше руки, тогда вы можете получить его.

Другая проблема будет в том, что вы обработчик запросов ajax. Я почти уверен, что используемый вами (и всеми остальными) метод onComplete будет вызываться только тогда, когда завершится вывод запроса сервера, а в вашем браузере будут полные данные.

Может быть возможно использовать другое событие или написать собственный код ajax (без использования таких вещей, как jQuery), но я даже не уверен, решит ли это вашу проблему; поскольку это также может быть связано с реализацией запроса x http.

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

Dan

0 голосов
/ 02 апреля 2011

Если вы выполните сброс ();Командой в PHP вы будете отправлять контент.Если вы сжимаете на уровне сервера, вам может потребоваться заполнить вывод, чтобы заполнить пакет, чтобы заставить его отправлять.

flush();

Вот пример: http://example.preinheimer.com/flush.php

0 голосов
/ 02 апреля 2011

Ищите расширение Firebx для Firebug.

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