Разбивка на страницы с помощью ajax

#php #jquery #codeigniter

#php #jquery #codeigniter

Вопрос:

Я создал приложение (с PHP, Codeigniter и jQuery), которое использует ajax для разбивки на страницы, аналогично тому, как Твиттер сделал это в тот же день (нажатие кнопки для загрузки большего количества данных).

Все это довольно хорошо, но, однако, есть несколько проблем.

Когда больше не останется сообщений для загрузки, я хочу, чтобы кнопка «загрузить больше» была удалена. Однако прямо сейчас я могу проверить, остались ли какие-либо записи, только когда я нажимаю кнопку, и скрипт возвращает null.

Вот как сейчас: допустим, в базе данных 14 записей. по умолчанию загружается 5.

загрузка в 1 клик -больше, загружается еще 5 сообщений. осталось 4.

загрузка в 2 клика -больше, загружаются оставшиеся 4 сообщения.

загрузка в 3 клика -больше, больше не осталось сообщений, кнопка исчезает

Но я хочу избавиться от шага 3, приложение должно «знать» о том, что на шаге 2 больше не осталось сообщений для рендеринга.

Я уверен, что есть простой способ, о котором я еще не думал…

Ответ №1:

просто. выберите 6 сообщений вместо 5 и отобразите только 5. Если сообщений меньше 6, не отображайте кнопку «Больше».

 if ($num_rows < 6){
  //remove more button
} 
  

Ответ №2:

Вы могли бы установить глобальную переменную Javascript, содержащую общее количество сообщений, примерно так:

 var total = <?php echo $total ?>;
  

И после вызова сравните сумму с общей:

 if($('.post').length == total) // .post being database results
    $('#loadmore').hide();
  

Комментарии:

1. Верно, но тогда есть и другие проблемы. Например, что произойдет, если пользователь опубликует другое сообщение. Тогда истинное общее количество сообщений будет равно $ total 1

2. Ну, если кто-то опубликует еще один пост, это тоже будет обработано с помощью jQuery, верно? Потому что это будет отправлено AJAX и добавлено в список. Поскольку total это переменная Javascript, вы можете просто сделать total в том же коде, что и добавление записи в список.

Ответ №3:

Возвращает объект JSON с одним свойством, представляющим собой массив (записи), и одним свойством, представляющим собой bool «EOF» или подобное, чтобы указать, когда больше нет записей для загрузки.

если(response.EOF) //Скрыть кнопку..

Ооо и добавьте идентификатор последнего сообщения из текущей разбивки на страницы в ajaxRequest. Таким образом, сервер выдает вам, скажем, 25 сообщений из последнего, которое он вам дал. Тогда вы не получите смещения, если во время разбивки на страницы добавляется новое сообщение.

Ответ №4:

вы могли бы попробовать что-то вроде этого

 if ($num_rows < 5){
/*what ever you want removed */
} 
  

в конце цикла

Ответ №5:

Пожалуйста, пожалуйста, пожалуйста — не делайте разбивку на страницы в Ajax!

Это боль в $$ для навигации по таким страницам естественным образом, невозможно использовать кнопку «Назад» или кнопку «Перезагрузить» или установить бокмарк или что-нибудь еще!

не говоря уже о клиентах, которые вообще не поддерживают js

Комментарии:

1. для этой цели вы можете использовать jquery address plugin.

2. Если все сделано правильно, все, что вы упомянули, будет работать просто отлично.