2011-05-24 69 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() 
});