2012-07-09 74 views
2

我不确定我即将问的事情是可能的还是正确的做事方式,但是在这里。是否有可能停止当前执行的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调用(或称为这些调用的函数)?有什么其他方式可以解决这个问题吗?

回答

3

jqXHR object has an abort() method,你可以调用它来取消一个AJAX请求。

但是,这要求您保留对由$.get()返回的对象的引用。

可能更容易的方法是在发出请求时递增全局计数器,并在请求完成时递减全局计数器。在您的success处理程序中,如果计数器=== 0(例如,没有待处理的请求)仅显示结果。

+0

这两个优秀的建议 - 谢谢! – nitsua 2012-07-09 14:31:49

1

有没有其他办法可以解决这个问题?

而不是中止请求,它可能是更好地构建回调函数内$.get在清除数据显示新的数据作为一个单一的操作方式 - 即不清除数据,直到新数据已准备就绪。

JavaScript一次只处理一个事件/线程,所以每个AJAX响应都会在它们到达时连续处理。

相关问题