Ajax: как работать с потоком?

программирование php jQuery AJAX

При помощи Аякс запроса или точнее при помощи Jquery отсылается запрос на php скрипт. Этот скрипт выполнает поиск по БД, которая оооочень большая. Все найденные результаты он эхает сразе же (в любом виде: джейсон или html ещё не решил). Как мне сделать, что бы джаваскирпт не ждал пока с сервера придут все результаты поиска? То есть нужно сделать, что бы первый результат отправлялся в браузер и сразу же вставлялся в страницу, потом, на пример, через 5 (или 8) сек. будет найден второй результат, который тоже будет отправлен в браузер, но в HTML странице уже стоит один результат, а этот вставляется под ним.
Мне не известно как реализовать именно поточность, все остальные моменты представляю четко.

Примечание:
Задача по оптимизации поискового запроса или базы не стоит . Задача в оптимизации скрипта. Я слышал, что на одноклассниках когда-то сделали такую подгрузку "на лету". Помоему она называлась "безконечный фрейм".
Ответы:
Данное решение ненадёжно. HTTP не рассчитано на подобные дозаправки в полёте, и современные браузеры могут рвать сессию через минуту после установления соединения.
Проблема именно во времени передачи HTML-кода с результатами с сервера клиенту?
1) В javascript определите переменную offset = 0;
2) Отправляйте асинхронный запрос, указав параметром текущий offset;
3) На сервере получите все результаты и закэшируйте любым удобным способом (в последующих шагах используйте кэш, чтоб не гонять базу данных);
4) Выдайте HTML-код с порцией (скажем десятком) результатов клиенту, начиная с полученного offset;
5) jQuery получив ответ пусть дописывает его в контейнер с результатами, увеличит offset на 10 и повторит пункт 2;
6) И так пока ответ сервера не будет пустым.
Это не делается потоками (поскольку HTTP не поддерживает потоки, а время запроса ограничено; в случае, когда имеется видимость потока (видео/аудио-данные) на самом деле отправляется множество HTTP-запросов, в ответ на каждый из которых приходит только заранее ограниченный кусок данных).
Это выполняется несколькими запросами. Причем как правило нет большого смысла грузить сразу весь огромный объем данных (если данных действительно много).
Отдавайте первые несколько записей (20, 50, 100 - на выш выбор). Дальше с помощью JS отслеживайте прокрутку страницы. Когда пользователь приближается к концу результатов - отправляйте через AJAX еще один запрос, на получение следующих нескольких результатов поиска - получаете их и вставляете в страницу. И снова дальше отслеживаете прокрутку страницы, отправляя новые запросы как только пользователь заканчивает смотреть предыдущие.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.