jQuery ajax事件查杀/解除绑定

时间:2011-03-30 05:46:28

标签: jquery

此问题与this

有关

如果我得到以下ajax代码,是否可以在全局成功中进行一些编码,以便不会调用本地完成?我想要做的就是在显示结果之前进行一些全局检查。使用不同的jquery插件(jqgrid,jqform等)在页面上有多个ajax函数,因此包装ajax方法不应该是一个选项。

http://jsfiddle.net/AT5vt/1/

$('body').ajaxSuccess(function(e){
    alert('global');
    $('body').unbind('complete');
} );


$.ajax({
    type: 'POST',
    url: 'http://www.google.com',
    data: { name: "John", time: "2pm" } ,
    complete: function(data,s,xhr) {
        alert('local');
    }
})

3 个答案:

答案 0 :(得分:0)

您可以创建一个运行Ajax请求的辅助函数,然后首先运行全局代码,然后运行您传入的本地函数。

function wrapAjaxCall(type,url,ajaxData,localComplete)
{
    $.ajax({
    type: type,
    url: url,
    data: ajaxData,
    complete: function(data,s,xhr) {
        myglobal();
        localComplete();
       }
    })

}

这可能不是100%正确,你会得到这个想法。

答案 1 :(得分:0)

我会使用布尔标志来指示你是否应该在完整的回调中执行该函数。

var performLocalComplete = true;

$('body').ajaxSuccess(function(){

    alert('global');

    if(1 == 1) // Your condition to disable the localComplete
    {
         performLocalComplete = false;
    }

});


$.ajax({
    type: 'POST',
    url: 'http://www.google.com',
    data: { name: "John", time: "2pm" } ,
    complete: function(data,s,xhr) {

        if (performLocalComplete)
        {
            alert('local Complete');
        }
    }
})

http://jsfiddle.net/AT5vt/7/

答案 2 :(得分:0)

我可以通过抛出异常来模拟退出函数。

$('body').ajaxSuccess(function(){
    alert('global');
    throw "golbal error";
});

http://jsfiddle.net/AT5vt/9/

这可以达到我想要的效果。