在jQuery中获取先前的请求时阻止新请求

时间:2009-07-15 18:08:12

标签: jquery ajax

我想如何在浏览器获取上一个请求时阻止新的ajax请求! 我创建了一个包含这样的数据表的系统:

col1 | col2 | COL3 数据1 |数据2 | DATA3

当用户将鼠标悬停在数据字段上时,我使用Ajax来检索有关鼠标悬停事件数据的更多信息,但如果用户快速移动他/她的数据光标列,则会创建多个请求。我该如何防止这种情况?

3 个答案:

答案 0 :(得分:2)

我认为您可以缓存jquery ajax请求对象,然后稍后将其中止。

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

xhr.abort();

答案 1 :(得分:1)

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

His blog post可能会帮助你。

答案 2 :(得分: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调用。