Могу ли я выводить / сбрасывать данные на экран при обработке страницы AJAX? - PullRequest
2 голосов
/ 27 марта 2010

Мне нужно отобразить на моей странице список записей, извлеченных из таблицы. Ajax работает нормально (я запрашиваю базу данных и помещаю все данные в a на главной странице), но если у меня много записей (скажем, 500+), он будет зависать до полной загрузки данных, ТОГДА он будет отправлен обратно на страницу и правильно отображается.

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

Это то, что у меня есть на странице ajax:

В самом начале:

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
 ob_implicit_flush(1);

Тогда всякий раз, когда у меня есть эхо-вызов:

ob_flush();

Теперь, если я загружу страницу ajax в одиночку ... она будет перечислять записи при чтении их из базы данных. Но если я вызову ту же страницу через Ajax, она зависнет и отправит все данные сразу.

Есть идеи?

Это функция, которую я использую для получения содержимого ajax («id» является целью, «url» относится к странице ajax, которая выполняет запрос к базе данных для получения списка записей):

function ajax(id,url) {
 xmlhttp=new XMLHttpRequest();
 xmlhttp.open("GET",url,false);
 xmlhttp.send(null);
 document.getElementById(id).innerHTML = parseScript(xmlhttp.responseText);
}

1 Ответ

3 голосов
/ 29 ноября 2010

По существу вам нужно создать цикл с серверным кодом, который выводит вызов функции Javascript для обновления результата. Эти запросы должны быть сделаны в параллельном HTTP-соединении.

Более подробная информация доступна здесь: http://ajaxpatterns.org/HTTP_Streaming

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