我的内部系统中有一份报告,可以从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回调。发生回调时,检查响应的计数器是否与当前计数器值相同。如果没有,则忽略响应 - 它是由过时的点击事件触发的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top