我的内部系统中有一份报告,可以从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
不是一个选项,因为它只是将用户锁定。
提前感谢您的帮助。
答案 0 :(得分:3)
我认为试图中止先前的请求并不是一个好的解决方案。也许你应该使用简单的解决方法 - 为javascript中的每个ajax请求增加计数器,并将其传递给ajax回调。发生回调时,检查响应的计数器是否与当前计数器值相同。如果没有,则忽略响应 - 它是由过时的点击事件触发的。
答案 1 :(得分:1)
您可以查看ajaxmanager插件。