У меня есть плагин, который говорит мне, если элемент виден в окне просмотра с $('#element').visible()
(устанавливается на true
, если видимо).Предотвращение вызова ajax при прокрутке, когда уже вызвано
Теперь я хочу создать функцию, с помощью которой я просматриваю страницу и загружаю новый контент с помощью ajax. У меня это до сих пор:
window.onscroll = function() {
console.log($('#ele').visible());
if ($('#ele').visible()) {
//ajax call comes here
}
};
Как только я вижу элемент мой журнал показывает верно:
У меня нет проблем, реализующие Ajax-запрос сейчас, но не должен» t Я блокирую эту функцию только один раз? Как я могу предотвратить, что новый элемент, который уже загружен для загрузки снова (не используйте снова ajax)?
Я думал об использовании логической переменной, но моя проблема в том, что я не знаю, как это реализовать, потому что, если я задаю переменную, как браузер знал бы ее ценность? Потому что на каждом ходу моего колеса мыши он не может вспомнить, что такое ценность этой переменной?
EDIT:
Я попробовал код Измаила и он никогда не достигнет вызова Ajax (предупреждение не будет отображаться).
window.onscroll = function() {
var ajaxExecuted = false;
var ele = $('#load_more').visible();
console.log(ele);
return function() {
if (ajaxExecuted) return;
if (ele) {
alert("OK");
var ajaxArray;
ajaxArray = { page: 2 }
ajaxLoadContent(ajaxArray, "load_more", "ajax_load");
ajaxExecuted = true;
}
}
};
Спасибо за ваш ответ. Я попробую это сейчас. Мой вопрос о том, как браузер знает, что значение переменной ajaxExecuted? Я имею в виду, каков фоновой процесс шаг за шагом точно? – AlexioVay
Итак, я пробовал это, но код никогда не заканчивается 'if (ajaxExecuted) return;' потому что после этого он равен true? – AlexioVay
Внешняя функция - это выражение «Вызванное сразу выражение», которое возвращает функцию (обработчик события). Обработчик события будет выполняться внутри области функций IIFE, где доступно 'ajaxExecuted'. –