2010-06-25 57 views
11

我目前正在重写设置一个误差函数我所有的Ajax调用使用jQuery的方法(更清洁的代码!),并已申报了默认ajaxError功能,如下图所示:

$(document).ajaxError(function(event, request, settings){ 
    alert("there was some error.. boo"); 
}); 

我有自己的定义误差函数Ajax调用,我不希望上面的默认火:

$.ajax({ url: url, 
    success: function(data){ 
     // do something 
    }, 
    error: function (r, textStatus, errorThrown) { 
     // let's do something here regarding the error 
     alert("Oh no! Something went terribly wrong in here!"); 
     // just trying this to see if it will stop any other events (ie default ajaxError) 
     event.stopImmediatePropagation(); 
    } 
}); 

不过,现在我有几个Ajax调用在这里我要声明的错误函数在ajax调用中。我希望通过在ajax调用中声明一个错误函数,它会替换我定义的默认错误调用。但是,这似乎并不是这样,因为我继续首先得到我的ajax函数错误调用,然后我也看到上面的代码执行。

我试图从我的ajax错误函数中调用event.stopImmediatePropagation(),希望它会阻止进一步的事件触发(即:默认的错误事件),但除了告诉我在firefox中“事件”未定义。

任何想法?我希望我不必为每个Ajax调用都定义一个错误函数。如果说到这一点,我会的。刚刚想到我会问。

谢谢, 马特

回答

9

有上$.ajax()一个global option这个决定是否要执行这些global AJAX event handlers,只需将其设置为false,像这样:

$.ajax({ 
    url: url, 
    global: false, 
    success: function(data){ 
     // do something 
    }, 
    error: function (r, textStatus, errorThrown) { 
     alert("Oh no! Something went terribly wrong in here!"); 
    } 
}); 
+2

如果我只想要什么重写错误功能?我想保留可能设置的其他全局函数(例如ajaxSend,ajaxComplete)? – 2011-04-28 05:15:17

+2

@John - 只留下你不想重写的函数,全局变量将被使用:) – 2011-04-28 12:02:20