Как создать страницу с добавочной загрузкой - PullRequest
4 голосов
/ 17 декабря 2009

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

http://docs.python.org/

Каждый раз, когда вводится поисковый термин, он будет продолжать загружаться и загружаться, пока не будет получен какой-либо результат, он будет отображаться постепенно, довольно круто: D.

[edit] Я использую Python CGI (сервер) + Jquery (клиент). Я задавал подобный вопрос здесь:

Показать результат на веб-странице, как только данные будут доступны на сервере

Тот факт, что я пытаюсь запросить скрипт на сервере ТОЛЬКО ОДИН и позволить клиентской странице постепенно отображать ожидаемые результаты, вызвал у меня головную боль. Если я не ошибаюсь, длинный опрос или что-то подобное не применимо к этой ситуации, верно?

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

[править] Поскольку я пытаюсь придерживаться режима «только по вызову», мне удается закрыть mod_deflate в apache2, но пока что мне это не удалось. Я погуглил эту проблему, и есть такие случаи, как я, не повезло: (.

Ответы [ 6 ]

3 голосов
/ 17 декабря 2009

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

Теперь, чтобы представить их, вы можете либо

  • Использовать AJAX: вернуть очень маленькую страницу с javascript, которая запустит поиск, что приведет к изменению DOM с результатами по мере их сброса (или сделайте несколько вызовов программе поиска с параметром, обозначающим, сколько результаты, которые вы хотите и смещение)

  • Использовать простой HTML: используйте HTML, чтобы браузеры не дожидались завершения рендеринга (в основном это позволяет избежать таблиц, так как таблицы обычно отображаются при получении всей таблицы)

Конечно, если бы мы знали, что вы программируете, вы могли бы получить более конкретный совет.

1 голос
/ 17 декабря 2009

Я бы предложил jQuery , если вы собираетесь использовать Javascript / AJAX. Если у вас никогда не было опыта работы с JS, но у вас есть время, чтобы прочитать их руководство по началу работы, это (IMO) отличное место / время для начала. Не нужно много работать, чтобы получить что-то относительно впечатляющее.


Кроме того, jQueryUI превосходен и имеет несколько очень полезных плагинов. Мой любимый плагин для вкладок, потому что он позволяет вам настроить полноценный веб-сайт AJAX именно так, как вы хотите. Он также очень легко очищается, у него на сайте есть конструктор тем, который вы можете настроить, а затем загрузить для использования в любом месте. Довольно гладко.

Моя недавняя трата времени на выходных, We Come As Romans Sucks , использует базовую реализацию вкладок и скинов jQUI. Минимальное усилие с огромным усилением.

1 голос
/ 17 декабря 2009

Способ сделать это - использовать Javascript для восстановления данных после загрузки страницы, это обычно называется «AJAX».

Если вы сообщите нам, какую платформу вы используете, кто-то сможет предоставить вам более конкретную информацию - существует множество наборов инструментов, которые вам здесь помогут, вам не нужно писать Javascript с нуля

1 голос
/ 17 декабря 2009

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

В любом случае, есть два основных способа сделать это. Существует Ajax-путь, а затем «оставьте http-соединение открытым». Ajax-путь звучит так, как будто он имеет больше смысла для этого варианта использования.

Ajax way . Ajax с динамической прокруткой. Существует множество способов Ajax для этого.

Вот интересный метод длинного опроса, который похож. HTTP-метод с использованием длинного опроса .

1 голос
/ 17 декабря 2009

Звучит так, будто пришло время AJAX. Когда человек отправляет запрос, отправьте запрос AJAX на сервер, чтобы получить некоторые результаты. Покажите какое-нибудь «загрузочное» сообщение, пока не получите ответ. Установите таймер Javascript на странице так, чтобы он обновлял вывод результатов каждые несколько секунд, пока, возможно, не будет установлен какой-либо флаг, чтобы он знал, что результатов больше нет, и он может прекратить обновление. Пусть сервер хранит результаты в сеансе, возможно, или временно в базе данных. Ваш таймер может заставить AJAX-запрос к серверу проверить, были ли найдены и сохранены ли какие-либо дальнейшие результаты в сеансе / базе данных, и обновить вывод HTML так, чтобы он отображал все найденные до настоящего времени результаты.

Это может быть интересно / полезно: Выпущен новаторский информационный документ по инкрементальному поиску AJAX - механизм поиска данных для спасения .

1 голос
/ 17 декабря 2009

Я думаю, вам придется использовать ajax для такого эффекта.

Посмотрите на это в Python JavaScript :

performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);

$('#search-progress').text(_('Preparing search...'));
this.startPulse();

и т.д.

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