在发送下一个请求之前中止ajax请求? (jQuery的)

时间:2009-11-27 21:57:18

标签: jquery ajax xmlhttprequest

我的内部系统中有一份报告,可以从1天数据返回到整年。因此,报告可能需要0.5秒或超过45秒才能生成所有内容。

该报告允许您修改一堆过滤器,所有这些过滤器在修改后都会非常简单地触发ajax请求:

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

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

  

/ report /?start_date = 1月(仍在加载...)

     

/ report /?start_date =二月(嘿,我现在也来了!)

然后,通常较小的一个会更快加载,但是另一个加载它会覆盖它们已经拥有的那个......嗯:)

我已经尝试在ax.abort()变量声明之后使用ax,但它似乎没有用。{/ p>

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您可以查看ajaxmanager插件。