Я хочу создать форму, которая будет использовать jquery для отправки списка ключевого слова в файл php, для загрузки этого файла может потребоваться много времени, в зависимости от размера списка ключевых слов.
Я хочу, чтобы загрузить php-ответ в div или контейнер в реальном времени без использования iframes.
Весь запрос ajax, который я знаю, должен ждать, пока запрос не будет закончен, прежде чем получить доступ к ответу, мне нужно получить доступ к этому ответу, даже когда он еще не закончен, поэтому я могу обновить ход в реальном времени.
Действительно, есть способ. С простыми старыми объектами 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?
Недавно Джош опубликовал о технологии COMET, которая, кажется, подходит вам. В php есть несколько интересных ссылок с примерами.
Как показать печать с помощью AJAX / jQuery?
Обновлено: Самый надежный способ использования Ajax – рассматривать каждый запрос Ajax как атомарный: он работает или нет.
И вы (JS, запущенный на странице), действительно не получаете никакой обратной связи по мере выполнения вашего запроса. Таким образом, вам понадобится несколько вызовов. Но будь осторожен! Множество накладных расходов для каждого звонка и большинства браузеров будут выполнять только один или два раза за раз.
Я предлагаю использовать индикатор занятости для человека. Вы также можете показывать часы с обратным отсчетом, которые обновляются не реже двух раз в секунду, чтобы казалось, что что-то происходит.
Добавлено:
Вы также можете захотеть перепроектировать свое решение. Например, просмотрите процесс обновления как пакетное задание, которое Ajax запускает, отправив запрос. Затем сделайте дальнейшие призывы Ajax, чтобы узнать (и затем) отобразить ход выполнения пакетного задания для человека.
Комету и другие «держать стратегию открытых труб» можно использовать, но сложно надежно работать и, как правило, используют много ресурсов. Более пешеходный метод опроса может быть намного легче начать. Затем при необходимости оптимизируйте.
Похоже, вам нужно использовать несколько меньших запросов вместо одного большого.