在发送下一个请求之前取消ajax请求? (jQuery)

问题描述:

我在我们的内部系统中有一个报告,可以返回从1天数据到全年的任何地方。因此,报告可能需要0.5秒或超过45秒才能生成所有内容。在发送下一个请求之前取消ajax请求? (jQuery)

报告,可以修改一堆过滤器,所有这些修改时,火了一个Ajax请求非常简单:

var ax = $.ajax({ 
    type: "GET", 
    url: "/blah", 
    data: values, 
    success: function(data) { .. } 
}); 

现在,当我们精彩的用户指出:“哦,等等,我想问题就来了这是从2月份开始,而不是1月份!“。但是,自从1月份以来,一个请求已经发生了很多数据!因此,用户将日期选项切换到二月份,我可以看到Javascript控制台发出第二个请求。现在我们有两个去,这是一个比赛!

/报告/?START_DATE =一月(仍在载入中...)

/报告/?START_DATE =月(嘿嘿,现在我在这里呢!)

然后通常较小的一个将加载更快,但随后另一个负载和它过写一个他们已经有了..嗯:)

我使用ax.abort()放在ax变量提及的声明后,已经尝试编辑here但它似乎并没有工作。

所以现在我想知道,我错过了什么?我只想在用户更改某些选项时立即终止当前请求(客户端,我知道我无法在服务器端执行任何操作),因此我没有同时发送2个或更多请求。设置async: false不是一个选项,因为它只是锁定用户。

在此先感谢您的帮助。

您可以查看ajaxmanager插件。

+0

看起来很容易使用,谢谢。会试试这个 – Bartek 2009-11-28 00:33:19

+0

这个成果很好。感谢您的参考 – Bartek 2009-11-28 16:02:40

我认为试图放弃先前的请求并不是一个好的解决方案。也许你应该使用简单的解决方法 - 对于每个Ajax请求在javascript中增加计数器,并将其传递给ajax回调。当发生回调时,检查响应计数器是否与当前计数器值相同。如果不是,则忽略响应 - 它是由过时的点击事件触发的。

+0

嘿,不是一个不好的解决方案。很简单,但很好奇它将如何在应用程序中工作。将不得不明天尝试 – Bartek 2009-11-28 00:31:41

+0

好主意!将尝试在我的一个实施 – 2009-11-30 10:13:04