我该怎么附加“ajaxStart”方法?

时间:2011-08-18 16:42:08

标签: ajax jquery

我想检查脚本中是否存在任何未完成的Ajax事件,如下所示:

$('nav a').click(function(){
    var url = $(this).attr('href');
    $('#content').load(address,function(){
        //do some stuff when complete
    });
});

现在,如果单击两次导航,则两个请求都将执行,我基本上希望防止这种情况发生。 jQuery提供了.ajaxStart().ajaxStop()方法,但我不需要操作DOM,因此我不太清楚要调用它们的对象。我正在考虑使用变量:

var busy = false;
$(busy).ajaxStart(function(){this=true});
// etc...

使用

$('nav a').click(function(){
    if(busy==false){
        var url = $(this).attr('href');
        $('#content').load(address,function(){
            //do some stuff when complete
        });
    }
    else return false;
});

可是:

  1. 合法吗?
  2. 是否有更简单/更直接的方法?

1 个答案:

答案 0 :(得分:3)

在javascript中执行此操作的正确方法如下:

(function() {
    var buzy = false;
    $('nav a').click(function(){

        if (buzy) return;
        buzy = true;

        var url = $(this).attr('href');
        $('#content').load(address,function(){
            //do some stuff when complete
            buzy = false;
        });
    });
}());

要回答原始问题,ajaxStart可以绑定到document

$(document).ajaxStart(function() {
    buzy++;
});
$(document).ajaxStop(function() {
    buzy--;
});