jQuery.load()的不同方法;允许在加载过程中使用停止方法

时间:2010-06-21 20:59:59

标签: jquery ajax load

这是我在这里的第一个问题,我找不到任何似乎有同样问题的相关问题。我发现有些人在谈论.bind()来禁用链接,但我的问题是网站的不同部分有多个链接加载不同的页面。

所以我想知道是否有一个简单的ajax加载方法,我可以选择停止并清除它正在加载的内容,如果点击另一个链接加载其他内容。

我这样做是为了预防网络上那些不耐烦的人。因为,将一个负载调用到div上,然后将另一个负载调用到同一个div上,有时会导致第一个负载花费更长时间,并在第二个负载加载后最终加载。

这就是我目前正在使用的。

$('#content').empty().load(event.value, function() { //callback });

我很确定一旦调用它就无法停止.load方法,那么还有另一种可以停止的加载方法吗?

3 个答案:

答案 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请求:

Abort Ajax requests using jQuery