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