我已经构建了一个JavaScript应用程序,其中有一些图形,并带有一些用户可以更改的下拉过滤器。下拉菜单都有事件监听器,它们提交服务器请求以获取数据(通过jquery ajax调用),然后绘制数据图。问题是如果用户使用键盘快速浏览下拉列表中的许多不同元素。如果一个新的被触发,杀死阿贾克斯呼叫
服务器调用大概需要一秒钟的时间,所以如果他们快速滚动通过说20,这可能导致积累。创建了20个到服务器的不同请求,然后甚至没有保证服务器请求成功执行的最后一段代码是最新的过滤器。
所以我的问题是什么是最好的方式,当一个过滤器更改为杀死所有其他异步过程?以下是相关代码:
$("#filter").change(function(d) {
getData();
} //end of if
});
function getData() {
...
$.ajax({
url: myUrl
type: "GET",
dataType: "json",
success: function(d) {
[do some stuff]
} //end of success function
}); //end of ajax
} //end of getData
您有一个额外的大括号在第一个函数说它关闭了一个“if”。 – AtheistP3ace
您应该等到当前正在运行的请求完成后再发送一个新的请求(并保留当前运行时可能发生的某些请求)。即使你使用'XMLHttpRequest2'的'abort'功能,这仍然会导致不必要的高服务器负载。 –
可能重复[中止以前的AJAX调用时,一个新的?](https://stackoverflow.com/questions/9285271/abort-previous-ajax-call-when-a-new-one-made) –