У меня есть приложение, которое оценивает большой набор элементов и выводит оценку для каждого из них.
В моем php-скрипте я использую ob_start и ob_flush для обработки вывода данных для каждого рейтинга. Это отлично работает, если я напрямую загружаю скрипт. Но когда я пытаюсь использовать .get через jquery, загружается весь контент, а затем помещается в контейнер, а не поэтапно добавляется.
Мне интересно следующее
Для таких проблем у меня будет такой подход:
ob_start()
и ob_flush()
для пользователя, который отключает javascript в своем браузере. div
, а затем загрузить содержимое в этот div
. setTimeout
для непрерывного вызова AJAX-кода, а затем после достижения определенного условия (Ex, пустой ответ) вы можете удалить setTimeout
с помощью clearTimeout
. Каждый запрос AJAX должен иметь параметр смещения, поэтому он будет получать контент из последнего вызова AJAX. После получения ответа увеличьте смещение для следующего вызова AJAX. Для этого вы можете использовать глобальную переменную. Вы можете использовать простую глобальную переменную, чтобы предотвратить выполнение запроса AJAX во время последнего ожидающего ответа AJAX, чтобы предотвратить состояние гонки. Пример кода:
// блокировка переменной var is_running = FALSE; // смещение начинается с 0 var offset = 0; function load_content ($) { // проверка блокировки if (! is_running) { //замок is_running = true; // делать AJAX $ .get (URL, {PARAM}, Функция (соответственно) { // поместить данные в div // ... // если пусто, тогда вызовите clearTimeout // ... // увеличиваем смещение здесь смещение = смещение + NUM_ITEM_FETCHED // блокировка релиза is_running = false; }); } }
Следует обратить внимание на то, что, используя вызов AJAX, вы должны определить ответ вручную, поскольку ob_flush
и ob_flush
будут иметь никакого эффекта в этом сценарии.
Надеюсь, это поможет вам создать свой собственный код.
JQuery получит статус успеха от вызова ajax, когда полная страница закончит загрузку. Так что все, что вы делаете в php, не будет возвращено на вызывающую страницу до тех пор, пока весь процесс не завершится. (Ajax – это одноразовый / одно-приемная система)
Вам нужно будет усложнить вашу систему, чтобы делать то, что вы хотите.
пример..
У меня была аналогичная проблема некоторое время назад, где я хотел, чтобы php-скрипт отправил серию писем и обновил страницу jquery, чтобы сказать что-то вроде «Отправка 23/50».
То, что я закончил, – это настроить скрипт php для обработки одного элемента за раз. Это может также работать в вашем случае. Не могли бы вы jquery передать какой-то идентификатор элемента в php-скрипт, который обрабатывает только один элемент? Затем в обратном вызове вы можете поместить данные для этого элемента на странице, а также создать новый запрос ajax для следующего элемента. Другими словами, каждый обратный вызов создавал новый запрос для следующего элемента до тех пор, пока весь список элементов не будет зациклирован.
Как вы думаете?
-DLH