簡體   English   中英

快速滾動時,ajax請求觸發多次

[英]ajax request triggering multiple times when scrolling is fast

在這里,我試圖實現無限滾動,但是當我滾動太快時,會觸發具有相同參數的多個ajax請求,這將再次導致相同數據再次出現。如何克服此問題,請幫忙。

(function( $ ){


 $.fn.scrollPagination = function(options) {

        var opts = $.extend($.fn.scrollPagination.defaults, options);  
        var target = opts.scrollTarget;
        if (target == null){
            target = obj; 
        }
        opts.scrollTarget = target;

        return this.each(function() {
          $.fn.scrollPagination.init($(this), opts);
        });

  };

  $.fn.stopScrollPagination = function(){
      return this.each(function() {
        $(this).attr('scrollPagination', 'disabled');
      });

  };

  var itr = 2;
  $.fn.scrollPagination.loadContent = function(obj, opts){
     var target = opts.scrollTarget;
     var mayLoadContent = $(target).scrollTop()+opts.heightOffset >= $(document).height() - $(target).height();
     if (mayLoadContent){
         if (opts.beforeLoad != null){
            opts.beforeLoad(); 
         }

         $(obj).children().attr('rel', 'loaded');
         $.ajax({
              type: 'POST',
              url: opts.contentPage+"?iteration="+itr,
              data: opts.contentData,
              success: function(data){
                itr++;
                $(obj).append(data); 
                var objectsRendered = $(obj).children('[rel!=loaded]');

                if (opts.afterLoad != null){
                    opts.afterLoad(objectsRendered);    
                }
              }
         });
     }

  };

  $.fn.scrollPagination.init = function(obj, opts){
     var target = opts.scrollTarget;
     $(obj).attr('scrollPagination', 'enabled');

     $(target).scroll(function(event){
        if ($(obj).attr('scrollPagination') == 'enabled'){
                $.fn.scrollPagination.loadContent(obj, opts);
                //alert(event.isPropagationStopped());
        }           
            //event.stopPropagation();
            //console.log(event.isPropagationStopped());
            event.preventDefault();
     });

     //$.fn.scrollPagination.loadContent(obj, opts);

 };

 $.fn.scrollPagination.defaults = {
         'contentPage' : null,
         'contentData' : {},
         'beforeLoad': null,
         'afterLoad': null  ,
         'scrollTarget': null,
         'heightOffset': 0        
 }; 
})( jQuery );

每10次觸發滾動事件觸發ajax怎么樣?

$.fn.scrollPagination.init = function(obj, opts) {
    var target = opts.scrollTarget;
    $(obj).attr('scrollPagination', 'enabled');
    target.scrollCount = 0;
    $(target).scroll(function(event) {
        this.scrollCount++;
        if (this.scrollCount % 10 == 0) {
            if ($(obj).attr('scrollPagination') == 'enabled') {
                $.fn.scrollPagination.loadContent(obj, opts);
                //alert(event.isPropagationStopped());
            }
            //event.stopPropagation();
            //console.log(event.isPropagationStopped());
            event.preventDefault();
        }
    });
}

當滾動到達頁面底部時,我曾經調用ajax函數。

function nearBottomOfPage() {
return $(window).scrollTop() > $(document).height() - $(window).height() - 200;
}

$(window).scroll(function(){      
    if (loading) {
      return;
    }

    if(nearBottomOfPage()) {
      loading=true;
      page++;
      $("#place_of_loading_image").show(); 
      $.ajax({
        url:'your source',
        type: 'get',
        dataType: 'script',
        success: function() {
            $("#place_of_loading_image").remove(); 
            loading=false;
        }
      });
    }
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM