这是我在这里的第一个问题,我找不到任何似乎有同样问题的相关问题。我发现有些人在谈论.bind()来禁用链接,但我的问题是网站的不同部分有多个链接加载不同的页面。
所以我想知道是否有一个简单的ajax加载方法,我可以选择停止并清除它正在加载的内容,如果点击另一个链接加载其他内容。
我这样做是为了预防网络上那些不耐烦的人。因为,将一个负载调用到div上,然后将另一个负载调用到同一个div上,有时会导致第一个负载花费更长时间,并在第二个负载加载后最终加载。
这就是我目前正在使用的。
$('#content').empty().load(event.value, function() { //callback });
我很确定一旦调用它就无法停止.load方法,那么还有另一种可以停止的加载方法吗?
答案 0 :(得分:1)
您可能希望在与容器关联的数据中保留序列号之类的内容。每次调用负载时递增序列号,然后在实际加载数据之前检查序列号是否小于或等于预期序列号。在这种情况下,您将使用get
而不是加载,因为您将数据检索与内容注入分开。
$('#content').empty().each( function() {
var $this = $(this);
var seq = $this.data('seq') || 0;
$this.data('seq',++seq);
$.get( event.value, function(data) {
var newSeq = $this.data('seq');
if (seq >= newSeq) { // ignore if a later request has been made
$this.html(data);
}
});
});
答案 1 :(得分:0)
@tvanfosson:我认为你的代码有点高于我的头脑。我似乎并不完全理解如何实现它。我可能应该发布更多代码,以便您解释会发生什么。
但我确实找到了另一种杀死load()
方法的方法。
我使用SWFAddress.js在一个页面上运行大部分网站,当网址更改时进行更改。因此,每次我的网址都会更改新内容。
$.address.change(function(event) {
rand = Math.floor(Math.random()*1000);
$('#content').empty().append('<div id="loading'+$rand+'"></div>');
$('#loading'+$rand).empty().load(event.value, function(data) { /*callback*/ });
});
我现在正在为我的内容div添加一个新的div,它有一个随机ID,我将内容加载到新的div中。这样,没有加载方法可以重叠或同时发生。
到目前为止它运作得非常好。你认为这可能是个问题吗?
答案 2 :(得分:0)
请参阅此其他条目以管理ajax请求: