2009-07-15 148 views
3

我想如何防止浏览器在获取先前的请求时发出新的Ajax请求! 我创建了一个系统包含一个表的数据是这样的:防止新的请求在jQuery中获取先前的请求

COL1 | col2 | col3 data1 |数据2 |数据3

当用户鼠标在数据字段我已经习惯了Ajax在事件检索有关数据鼠标的详细信息,但如果用户快速移动他/她的数据列多个请求的游标已创建。我如何防止这种情况?

回答

2

我想你可以缓存的jQuery Ajax请求对象,然后再放弃它。

var xhr = $.ajax({...}); 

xhr.abort(); 
+0

的目标是防止,不要放弃。 – montrealist 2009-07-15 18:29:07

1

Ben Nadel有一个很好的模式来处理AJAX错误,包括检查同一类型的多个请求。

His blog post可以帮助你。

+0

这是好主意,但它是这么想的解决我的解决方案:)坦克呢! – mehdi 2009-07-15 19:27:32

0

在你的情况,你所需要的鼠标悬停和AJAX请求之间有一个小的延迟。首先为AJAX请求执行setTimeout。如果在此超时期间发出另一个鼠标悬停,请清除超时并设置新的超时。

下面是一个简化版本(假设你使用相同的函数cell_onmouseover的所有元素的处理程序

var timeoutId = null; //Should be visible to both functions. 
function cell_onmouseover() 
{ 
    if (timeoutId) 
    { 
     clearTimeout(timeoutId); 
     timeoutId = null; 
    } 
    timeoutId = setTimeout(callAJAX, 500); //half a second delay. 
} 

function callAJAX() 
{ 
    //dostuff 
} 

[编辑]:您还可以增强这中止正在进行的AJAX调用,当用户鼠标悬停在一个新的元素。