【发布时间】:2017-06-15 18:59:26
【问题描述】:
我已经构建了一个 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。 -
您应该等到当前运行的请求完成后再发送一个新请求(并忽略当前运行时可能发生的一些请求)。即使您使用
XMLHttpRequest2的abort功能,这仍然可能导致不必要的高服务器负载。
标签: javascript jquery ajax events