Как сделать JQuery Асинхронный Multi-Response от одного запуска сценария PHP - PullRequest
1 голос
/ 23 января 2010

У меня есть файл run.php, на котором есть кнопка «Выполнить». Нажатие на него вызывает AJAX jQuery $ .get () обратно в response.php на сервере и отправляет результат в функцию обратного вызова Javascript getResponse (sData) внутри HTML-кода run.php для отображения в браузере. Я хочу иметь такие вещи, что, когда response.php проходит через список задач, он возвращает ответ с помощью команды echo и для getResponse обновляет DIV с этим статусом по мере его продвижения. Итак, допустим, у меня есть 5 шагов внутри response.php, и поэтому 5 операторов echo возвращаются в getResponse ().

Я пытался заставить это работать, но что происходит, так это то, что jQuery ждет и затем отправляет один единственный ответ сразу, а не отправляет, как это происходит вместе с 5 ответами.

Какая техника?

Причина, по которой я спрашиваю, состоит в том, что у меня есть скрипт, который что-то делает с кучей файлов. Первое, что он делает - это количество файлов, поэтому он обновляет мой индикатор выполнения. Затем, когда он пробегает файлы, он должен увеличивать мой индикатор выполнения, как каждые 1000 файлов.

Ответы [ 2 ]

1 голос
/ 23 января 2010

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

0 голосов
/ 23 января 2010

Поскольку вы не можете добиться прогресса в xmlhttprequest, я предлагаю вам изучить другие способы выполнения вызовов AJAX. Один из них через iframe. Вы можете создать скрытый iframe, установить его источники в request.php, а затем периодически проверять его содержимое. Это должно быть возможно, поскольку это все тот же домен и ограничения не применяются.

iframe может работать, потому что он ничем не отличается от обычного окна браузера, что означает, что он периодически применяет данные, которые попадает в DOM, даже если запрос еще не завершен. Потенциально могут быть проблемы с тем, как разные браузеры делают это, то есть IE показывает новый контент, только если он получил больше 4K или что-то еще. Но я уверен, что это можно преодолеть.

Итак, создайте новый скрытый iframe, добавьте src attibute в свой php-скрипт, заставьте этот скрипт периодически что-то записывать клиенту, а на клиенте проверять написанное и конвертировать его в блестящие графические элементы.

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