#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. Если все сделано правильно, все, что вы упомянули, будет работать просто отлично.