在发送下一个请求之前中止ajax请求? (jQuery的)
-
05-07-2019 - |
题
我的内部系统中有一份报告,可以从1天数据返回到整年。因此,报告可能需要0.5秒或超过45秒才能生成所有内容。
该报告允许您修改一堆过滤器,所有这些过滤器在修改后都会非常简单地触发ajax请求:
var ax = $.ajax({
type: "GET",
url: "/blah",
data: values,
success: function(data) { .. }
});
现在,当我们精彩的用户说“哦等等!我希望这是2月,而不是1月!“但是,自1月以来已经发生了大量数据!因此,用户将日期选项切换到二月,我可以看到Javascript控制台发出第二个请求。现在我们有两个去,这是比赛!
/ report /?start_date = 1月(仍在加载...)
/ report /?start_date =二月(嘿,我现在也来了!)
然后,通常较小的一个会加载更快,但是另一个加载并且它覆盖了他们已经拥有的那个......嗯:)
我已经尝试使用 ax.abort()
在声明 ax
变量之后放置这里但它似乎没有用。
所以现在我想知道,我错过了什么?我只想在用户更改某些选项时立即终止当前请求(客户端,我知道我无法在服务器端执行任何操作),因此我没有同时执行2个或更多请求。设置 async:false
不是一个选项,因为它只是将用户锁定。
提前感谢您的帮助。
解决方案
您可以查看 ajaxmanager 插件。
其他提示
我认为试图中止先前的请求并不是一个好的解决方案。也许你应该使用简单的解决方法 - 为javascript中的每个ajax请求增加计数器,并将其传递给ajax回调。发生回调时,检查响应的计数器是否与当前计数器值相同。如果没有,则忽略响应 - 它是由过时的点击事件触发的。
不隶属于 StackOverflow