2012-07-10 18 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