Jquery发帖两次?

I have a function advSearch in PHP. I have to call that function when someone scroll to bottom of the page. But the advSearch() is called twice automatically when I scroll to bottom of my page.

$(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);
  }
 });
});

SetTimeout won't do what I think you're trying here - it only delays running it - so when called multiple times, it will wait and call multiple times.

To throttle or debounce, you might try the _.throttle and _.debounce functions from http://underscorejs.org/

Use a flag variable like

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);
  }
 });