2013-07-05 342 views
0

我正在加載facebook likebox onscroll。但每次我向上/向下滾動ajax被解僱。我希望阿賈克斯只能射擊一次。這裏是我的代碼:只執行一次ajax呼叫一次

jQuery(document).ready(function() { 
    jQuery(window).scroll(function() { 
     var scroll = jQuery(window).scrollTop(); 

     if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function(data) { jQuery('.fblikeajax').html(data);}); 
     } 

    }); 
}); 
+0

看看這個例子:http://stackoverflow.com/問題/ 9758527/jquery-call-end-of-page-scroll – krishgopinath

回答

4

使用jQuery的on()off()

$(document).on("scroll", scrollcheck); 

var scrollcheck = function() { 
    var scroll = jQuery(window).scrollTop(); 
    if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function (data) { 
      jQuery('.fblikeajax').html(data); 
     }); 
     $(document).off("scroll", scrollcheck); 
    } 
} 
+0

可愛!感謝您的解決方案。 – Towfiq

+0

爲什麼不使用.one? – Towfiq

+0

'one'只會觸發一次,但這並不意味着您的if語句會通過。對於點擊事件等,你可以使用'one' – Jonathan

0

解除綁定事件偵聽器它激發後:

jQuery(document).ready(function() { 
    var scrollHandler = function() { 
     var scroll = jQuery(window).scrollTop(); 

     if (scroll <= 770) { 
     jQuery.get('ajax/facebook.html', function(data) { jQuery('.fblikeajax').html(data);}); 
     } 
     $(window).unbind('scroll', scrollHandler); 
    } 
    jQuery(window).scroll(scrollHandler); 
}); 

我沒有測試的代碼,但它應該是八九不離十。

1

如果阿賈克斯已經被解僱,你可以將檢查添加一個變量:

jQuery(document).ready(function() { 
    var ajax_fired = false; 
    jQuery(window).scroll(function() { 
     var scroll = jQuery(window).scrollTop(); 

     if ((scroll <= 770) && !ajax_fired) { 
      ajax_fired = true; 
      jQuery.get('ajax/facebook.html', function(data) { 
       jQuery('.fblikeajax').html(data); 

      }); 
     } 

    }); 
}); 
+0

這仍然有可能觸發請求,直到收到第一個響應並更改'ajax_fired'標誌。 – Jasen

+0

你是對的。編輯答案來解決這個問題 –