是否有可能停止当前执行的Javascript代码?
问题描述:
我不确定我即将问的事情是可能的还是正确的做事方式,但是在这里。是否有可能停止当前执行的Javascript代码?
我有一个网页,它使用AJAX从服务器加载一些数据并以可视方式显示它。用户可以选择使用页面上的两个按钮之一来“滚动”按周过滤的数据。 这些按钮的代码是这样的:
$("#leftButton").click(function() {
clearCurrentlyDisplayedData();
changeFilter(1); //Or -1, or whatever.
loadAndDisplayData();
}
在本(简化的)实施例,loadAndDisplayData()将使用AJAX调用来获取该数据,然后在完成请求显示它,这样的:
$.get(
"web/service/address",
function (data, textStatus, jqXHR) {
//Display the data here
});
但是,用户单击箭头以快速滚动数据时出现问题。如果快速连续点击两次按钮,则会显示两周的数据。
我不要想要禁用按钮,直到数据被收集 - 由于数据收集和显示确实需要一点时间,这会杀死用户快速浏览网站的能力,并会很快变得刺激。
当用户点击其中一个按钮以防止加载两组数据时,是否有可能杀死当前正在执行的脚本或AJAX调用(或称为这些调用的函数)?有什么其他方式可以解决这个问题吗?
答
jqXHR
object has an abort()
method,你可以调用它来取消一个AJAX请求。
但是,这要求您保留对由$.get()
返回的对象的引用。
可能更容易的方法是在发出请求时递增全局计数器,并在请求完成时递减全局计数器。在您的success
处理程序中,如果计数器=== 0
(例如,没有待处理的请求)仅显示结果。
答
有没有其他办法可以解决这个问题?
而不是中止请求,它可能是更好地构建回调函数内$.get
在清除数据和显示新的数据作为一个单一的操作方式 - 即不清除数据,直到新数据已准备就绪。
JavaScript一次只处理一个事件/线程,所以每个AJAX响应都会在它们到达时连续处理。
这两个优秀的建议 - 谢谢! – nitsua 2012-07-09 14:31:49