#javascript #jquery #ajax
#javascript #jquery #ajax
Вопрос:
Контекст
У меня есть страница на моем сайте, куда загружаются комментарии пользователей. После загрузки комментариев, когда пользователь прокручивает страницу до конца, загружается больше комментариев. Я помещаю этот код прокрутки в нижней части обратного вызова AJAX success, который получает комментарии, потому что если оставить его вне вызова AJAX, функция AJAX запускается несколько раз, дважды загружаясь в одни и те же комментарии. Код AJAX выглядит примерно так:
function getArticleHighlightResponses() {
$.ajax({
url: 'includes/articles/getArticleHighlightResponses.php',
type: 'POST',
data: {articleId: articleId, commentId: commentId, contenttype: contenttype, offset: getHighlightArticleResponsesOffset},
dataType: 'json',
success: function(data) {
data.forEach(function(item) {
//do stuff in here
});
getHighlightArticleResponsesOffset = getHighlightArticleResponsesOffset 10;
$(window).on("scroll", debounce(function() {
if ($(window).scrollTop() $(window).height() == $(document).height()) {
<?php if (isset($_GET['getSpecificComment'])) { ?>
var commentId = "<?php echo $_GET['commentId']; ?>";
var contenttype = "<?php echo $_GET['contenttype']; ?>";
getArticleHighlightResponses(commentId, contenttype);
<?php } else { ?>
getArticleHighlightResponses();
<?php } ?>
}
}, 50));
}
});
}
Вызов этого кода прокрутки внутри обратного вызова AJAX success устраняет проблему двойной загрузки комментариев, но каждый раз, когда я прокручиваю страницу вниз, функция getArticleHighlightResponses()
вызывается в два раза чаще, чем в предыдущий раз; если я прокручиваю страницу вниз один раз, она вызывается один раз. Если я делаю это снова, оно вызывается дважды. Если я сделаю это снова, это будет вызвано четыре раза. Если я сделаю это еще два раза, в общей сложности пять раз, это вызовется 16 раз. Это приводит к множеству вызовов функций всякий раз, когда я прокручиваю страницу вниз, когда я хочу, чтобы функция была вызвана только один раз.
Вопрос
Есть ли что-то в природе обратного вызова AJAX success, из-за чего события запускают функции слишком много раз?
Комментарии:
1. Нет, вы добавляете обратные вызовы внутри вашего метода успеха ajax. Таким образом, чем больше запросов ajax вы делаете, тем больше обратных вызовов вы добавляете.
2. @Eldar Это причина, по которой функция вызывает double каждый раз?
3. Да, и не только двойное количество обратных вызовов будет равно вызовам ajax.
4. @Eldar Знаете ли вы способ отменить это, чтобы обратные вызовы не складывались?
5. Вы можете удалить этот код, добавив
scroll
обработчик событий из обратного вызова. Тогда вам нужно что-то вроде автоматического выключателя. После того, как вы вызвалиgetArticleHighlightResponses
функцию в своем обработчике событий, она не должна вызывать этот метод снова, пока он не завершится. Вы можете использовать переменную для отслеживания статуса вызова ajax.