Как сделать запрос, при реализации scroll-to-load функционала?

Здравствуйте. Пытаюсь сделать функционал, скролл-лоад. Ну скрипт я напишу, там в принципе нечего сложно, отслеживаем прокрутку до низу и посылаем аякс запрос. А вот как к базе запросы делать? Вот допустим у нас уже есть первые 10 итемов на странице, мне нужно загрузить следующие 10, если посылать простой запрос, он вставит эти же 10
  • Вопрос задан
  • 2541 просмотр
Решения вопроса 1
Такой подход, как советует @IgorO2, будет узким местом в вашей системе, если она вдруг станет высоконагрузочной. Намного лучше посылать не оффсет, а последний ID записи и строить запрос так:
... WHERE `item_id` > ? LIMIT 10
В зависимости от порядка сортировки знак нужно будет поменять на противоположный.

Ну и естественно, что в уважающих себя и своих клиентов системах, от сервера мы получил только JSON, а всю шаблонизацию будем делать на клиенте (реализуем MVC, например, через backbone).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
IgorO2
@IgorO2
73
Ну ведите счет записей и в зависимости от количества записей делайте запрос с
LIMIT count, 10
Ответ написан
Комментировать
jakulov
@jakulov
реализаций много, можно поделить условно на 2:
1. Используется шаблонизатор на стороне клиента (js), тогда получаете json вида:
{
items: [..],
offset: 10
}

где offset приходит в ответе, и показывает последний использованный в offset запрос, соответственно в js послыаем get-запрос offset + 10.
2. Шаблонизация идет на сервере и в ajax получаем готовый html.
тогда можно тупо считать кол-во загруженных страниц. Если вестка выглядит примерно так:
<div id="content">
  <div class="page">...</div>
  <div class="page">...</div>
  ...
</div>

Т.е. каждую загруженную порцию итемов обрамляем в div с классом page и вставляем в #content.
Тут можно тупо считать кол-во страниц: $('#content').find('.page').length. И посылать это кол-во в get-запрос как указатель на страницу, которую нужно загрузить следующей. Т.е. получается тоже самое что и при обычно пагинации
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы