2015-06-19 138 views
1

我試圖做無限滾動,所以當滾動我向服務器發送ajax請求來獲取數據但滾動多個Ajax請求時,並返回相同的數據,所以如何我可以在發送前取消Ajax請求,如果有一個已經存在,我想這樣的如何阻止Ajax請求存在另一個請求

data: ({ 
         beforeSend: function (xhr) { 
          if (activeAjaxConnections != 1) { 
           xhr.abort(); 
          } 
          activeAjaxConnections++; 
          //Show Loader.... 
          $("#Ajax-Load-Image").css('visibility', 'visible'); 

         }, 

我所有的代碼

var lock_load = '1'; 
    var activeAjaxConnections = 1; 
    var PageNumber = 2; 

    $(window).scroll(function() { 

     if ((Math.ceil($(window).scrollTop() - $(window).height()) * -1) <= getHeight() + 550) { 
      if (lock_load === '1') { 

       var xhr = $.ajax({ 
        type: "POST", 
        async: true, 
        dataType: "json", 
        url: ajaxurl, 

        data: ({ 
         beforeSend: function (xhr) { 
          if (activeAjaxConnections != 1) { 
           xhr.abort(); 
          } 
          activeAjaxConnections++; 
          //Show Loader.... 
          $("#Ajax-Load-Image").css('visibility', 'visible'); 

         }, 
         type: "POST", 
         action: 'Ajax_Get_SpacesAndSponsors', 
         Page: PageNumber 
        }), 
        success: function (response) { 

         PageNumber++; 
         var Message = response.spaces.Message; 

         console.log(response); 
         console.log(Message); 
         Draw_SpacesAndSponsor(response); 
         lock_load = response.spaces.Lock_load; 
         activeAjaxConnections--; 
        }, 
        error: function (errorThrown) { 
         alert(errorThrown); 
      n  } 

       }); 
      } 
     } 
    }); 

,但它給出一個錯誤XHR是不確定的請求任何幫助,許多在此先感謝。

+1

如果你想讓它完成之前停止AJAX調用,爲什麼不直接包住'$。阿賈克斯(...)'來檢查,如果activeAjaxConnections爲1的條件之間? –

回答

2

嘗試標誌 使得AJAX調用設置標誌設置爲true和AJAX調用後作出前設置標誌爲假,終於在Ajax請求完成後重新設置標誌TURE

var ready = true; 
    $(window).scroll(function(){ 
     if(ready == true){ 
     ready = false; 
     $.ajax({ 
      url: "/pagination", 
      cache: false, 
      success: function (response){ 
       //response 
      } 
     }).always(function() { 
      ready = true; //Reset the flag here 
     }); 
     } 
    }); 
1

使用下面的代碼,使用一個簡單的標誌變量,它會被defualt設置爲false,也就是說,如果條件滿足,ajax調用不會發生,那麼它將設置爲true,以表示ajax調用已經開始,一旦成功:或者錯誤:回調觸發變量將被設置爲false,以便可以進行另一個Ajax調用。

startedAjax = false; 

    if (lock_load === '1') { 
       startedAjax = true; 
       var xhr = $.ajax({ 
        type: "POST", 
        async: true, 
        dataType: "json", 
        url: ajaxurl, 

        data: ({ 
         beforeSend: function (xhr) { 
          if (activeAjaxConnections != 1) { 
           xhr.abort(); 
          } 
          activeAjaxConnections++; 
          //Show Loader.... 
          $("#Ajax-Load-Image").css('visibility', 'visible'); 

         }, 
         type: "POST", 
         action: 'Ajax_Get_SpacesAndSponsors', 
         Page: PageNumber 
        }), 
        success: function (response) { 
         startedAjax = false //set is false 
         PageNumber++; 
         var Message = response.spaces.Message; 

         console.log(response); 
         console.log(Message); 
         Draw_SpacesAndSponsor(response); 
         lock_load = response.spaces.Lock_load; 
         activeAjaxConnections--; 
        }, 
        error: function (errorThrown) { 
          startedAjax = false; 
         alert(errorThrown); 
       } 

       }); 
      } 
     } 
    });