Slash-Zn
@Slash-Zn

JQuery: Почему после добавления / удаления блока, last() возвращает не последний блок?

Здравствуйте!
Попытаюсь объяснить суть проблемы. Есть лента новостей, например, как в ВК, прокручиваем страницу вниз, и новости догружаются автоматически. Выборка работает по временной метке - последнее обновление новости:
'AND feed.time_update < ' . (int) $lastFeed['time_update']

С страницы ленты новостей, для дальнейшей загрузки берется ID самого нижнего блока, чтобы получить "time_update" при помощи jQuery. Все работает идеально, новости грузятся в правильном порядке, пока не добавишь в ленту новую новость (Блок) или не удалишь существующею (Не перезагружая страницу). После этого некоторые новости повторяются в ленте.

Вот сценарий получения ID последнего блока:
$Core.loadMoreFeed = function(reloadIteration) {
	var lastFeed = $('.js_parent_feed_entry').last(); // Получаем последний блок
	var lastFeedId = (lastFeed) ? lastFeed.attr('id') : null; // Получаем ID новости
	
	// Передача параметров на сервер
	$.ajaxCall('feed.viewMore', $('#js_feed_pass_info').html().replace(/&amp;/g, '&') + '&iteration="' + $reloadIteration + '"&last-feed-id=' + lastFeedId, 'GET');
};

Объясните, пожалуйста, в чем может быть проблема?
Спасибо.
  • Вопрос задан
  • 23 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
В ответе ajax вызова передавайте не только очередную коллекцию новостей, но и параметр для следующей «страницы» – например id, после которого брать новости. Как получили ответ – показали принятые новости и сохранили в переменной id для следующего запроса.

p.s. про SQL-запросы
'AND feed.time_update < ' . (int) $lastFeed['time_update']
оч. плохая практика склеивать строку запроса. Используйте биндинг параметров, что-то типа:
$stmt = $conn->prepare("SELECT ..... AND feed.time_update < ?");
$stmt->bind_param($lastFeed['time_update']);
$stmt->execute();
$result = $stmt->fetchAll();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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