2011-05-24 59 views
2

有沒有辦法阻止隊列建立JQuery AJAX調用?JQuery/AJAX - 阻止隊列建立

我有一個產品列表和懸停附加信息通過AJAX調用加載。問題在於,如果您在停止時在菜單上上下運行鼠標,則會創建一個隊列,您必須等待才能趕上所有產品。

我正在使用Hide()函數,所以當您從菜單中出來時,它立即恢復爲默認內容,但隊列仍然在後臺進行,只是隱藏起來。

當你有一堆沒有邊距的元素時,在下一個元素的鼠標之前調用的懸停函數的mouseout部分是?

當前的代碼很簡單:

$("#product-menu a").hover(
       function() { 
        $("#product-welcome").hide(); 
        $("#product-overview").show(); 
        $("#product-overview").load("lib/product-overview.php", {"pid": this.id}); 
       }, 
       function() { 
        $("#product-overview").hide(); 
        $("#product-welcome").show(); 
       } 
      ); 

回答

1

您可以使用您可以存儲jqXHR對象,並用它來調用.abort()在當前運行Ajax請求.ajax()方法做一些你做的工作。這不會與.load協同工作,因爲它不允許訪問jqXHR對象。

這將是這個樣子,

var activeRequest;  
... 
$("#product-menu a").hover(
         function() { 
          ... 
          if(activeRequest.abort) 
          { 
           activeRequest.abort(); 
          } 
          activeRequest = $("#product-overview").ajax(...); 
         }, 
+0

感謝,工程巨大。我也切換到$ .ajax方法,因此數據將被緩存 – MattP 2011-05-25 13:52:12

0

,當你將鼠標移到該產品就開始的獲取信息,並鎖定變量,確保只有一個請求是在同一時間完成之前,我想補充的延遲。 此外,如果用戶將鼠標懸停在產品上,則應該一次又一次緩存數據客戶端,而不是一次又一次地緩存相同的產品概覽。

0

看看$.ajaxPrefilter api。

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if(/*some condition*/) 
     jqXHR.abort() 
});