Как постепенно загрузить ответ на запрос ajax (jquery), не дожидаясь его завершения? - PullRequest
4 голосов
/ 02 мая 2010

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

Я хочу загрузить php-ответ в div или контейнер в режиме реального времени без использования iframes.

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

Ответы [ 4 ]

4 голосов
/ 02 мая 2010

Действительно, есть способ. С простыми старыми объектами xmlhttpobjects я следил за ReadyState. Состояние готовности 4 означает, что запрос завершен. Состояние готовности 3 означает, что я могу получить некоторые выходные данные и ждать большего:

request.onreadystatechange=function()
{
    switch(request.readyState)
    {
        case 4:
            console.log("all good things come to an end");
        break;
        case 3:
            console.log("o, hai!" + request.responseText);
        break;
    }
}

Я полагаю, что вы можете добиться того же, используя jQuery: jQuery: возможно ли req.readyState == 3?

1 голос
/ 02 мая 2010

Недавно Джош опубликовал информацию о технологии COMET, которая кажется вам подходящей. Есть несколько интересных ссылок с примерами в php.

Как показать печать с помощью AJAX / jQuery?

1 голос
/ 02 мая 2010

Обновлено: самый надежный способ использования Ajax - считать каждый запрос Ajax атомарным: работает или нет.

И вы (JS, работающий на странице) действительно не получаете никакой обратной связи, поскольку ваш запрос выполняется. Так что вам нужно несколько звонков. Но будь осторожен! Слишком много накладных расходов на вызов, и большинство браузеров будут выполнять только один или, может быть, два одновременно.

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

Добавлено:

Вы также можете реорганизовать свое решение. Например, рассматривать процесс обновления как пакетное задание, которое Ajax запускает, отправляя запрос. Затем выполните Ajax-вызовы, чтобы узнать (а затем) отобразить ход выполнения пакетного задания для человека.

Можно использовать комету и другие «стратегии открытия трубопровода», но они трудны для надежной работы и имеют тенденцию использовать много ресурсов. Более пешеходный метод опроса может быть намного легче начать. Затем оптимизируйте при необходимости.

0 голосов
/ 02 мая 2010

Похоже, вам нужно использовать несколько небольших запросов вместо одного большого.

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