У меня есть функция advSearch
в PHP. Я должен вызвать эту функцию, когда кто-то прокрутит страницу до конца. Но advSearch()
вызывается дважды автоматически, когда я advSearch()
нижнюю часть моей страницы.
$(document).ready(function() {
var txt = 1;
$(window).scroll(function() {
if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
$('#loadmore_tab01').css('display','block');
setTimeout(function(){
$.post("advSearch",{txt:txt},function(result){
if (result) {
$('#loadmore_tab01').css('display','none');
if (result != 0) {
var count = JSON.parse(result).length;
var oldcount = $('#tabs01').attr('data-count');
var newcount = parseInt(oldcount)+count;
$('#tabs01').children('.clear').remove();
generateHTML_vertical(JSON.parse(result),parseInt(oldcount));
$('#tabs01').attr('data-count',newcount);
}
}
});
},9000);
}
});
});
Используйте переменную флагов, как
var executed = false; var txt = 1; $(window).scroll(function() { ($(window).scrollTop() >= ($(document).height() - $(window).height())) { $('#loadmore_tab01').css('display','block'); setTimeout(function(){ if(!executed){ $.post("advSearch",{txt:txt},function(result){ executed = true; if (result) { $('#loadmore_tab01').css('display','none'); if (result != 0) { var count = JSON.parse(result).length; var oldcount = $('#tabs01').attr('data-count'); var newcount = parseInt(oldcount)+count; $('#tabs01').children('.clear').remove(); generateHTML_vertical(JSON.parse(result),parseInt(oldcount)); $('#tabs01').attr('data-count',newcount); } } }); } },9000); } });
SetTimeout не будет делать то, что, я думаю, вы здесь пытаетесь - это только задерживает его выполнение, поэтому при вызове несколько раз он будет ждать и звонить несколько раз.
Для дросселирования или дебюта вы можете попробовать функции _.throttle
и _.debounce
из http://underscorejs.org/