2012-07-10 58 views
1

对于jQuery的$.ajax电话:

我想有一个全局错误处理程序,这样的事情:

$(document).ajaxError(function (e, jqxhr, settings, exception) { 
     window.location = '/Error/ServerError'; 
    }); 

但是...我只有当$.ajax调用中的error方法未定义时,才希望该方法运行。我看他们是否没有明确定义,他们是匿名方法,但我不知道如何检查一个方法是匿名还是命名。

所以,对于这样的事情,我不希望被称为全球处理程序:

$.ajax({ 
    url: "url", 
    type: "POST", 
    success: function(data) { 
     //do something 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     ShowError("Error", errorThrown); 
    } 
}); 

但对于这个电话,我想叫全球处理器,并重定向页面:

$.ajax({ 
    url: "url", 
    type: "POST", 
    success: function(data) { 
     //do something 
    } 
}); 

回答

4

您可以检查settings参数在全球处理程序是否不存在定义的error场:

$(document).ajaxError(function (e, jqxhr, settings, exception) { 
    if (settings.error) 
     return; 
    window.location = '/Error/ServerError'; 
}); 

jsFiddle

+0

工作示例它在jsFiddle中工作,但由于某种原因,它不适用于我的项目。无论是定义的还是匿名的,settings.error都是真的。 – Martin 2012-07-10 14:05:39

+0

您使用哪种浏览器/ jQuery版本?在jQuery> = 1.5的Firefox/Chrome/Safari/IE6中,'settings.error'不是匿名的,而是'undefined',所以上述方法可行(我无法在Opera或jQuery中使用该示例<= 1.4)。当你console.log(设置)'它是否**总是**在你的项目中定义了错误?你是否按照你在问题中描述的方式调用'$ .ajax'? (即有没有其他的代码在没有的时候注入错误参数?) – mgibsonbr 2012-07-10 21:17:00