2013-08-01 32 views
13

我想捕捉任何AJAX 401 Unauthorised例外,但做不喜歡改變我所有的Ajax查詢。有沒有辦法改變它像任何$就調用(覆蓋任何error處理程序)?JQuery的捕捉任何Ajax錯誤

+3

使用谷歌將帶給你一個答案在數秒:'$ .ajaxSetup({ 的StatusCode:{ 401:函數(){// 這將捕獲的任何和所有拒絕訪問錯誤 }} } ) ;' –

回答

20

可以使用全局AJAX事件處理.ajaxError()

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status== 401) { 
        $("div.log").text("Triggered ajaxError handler."); 
    } 
}); 
+0

有些時候'jqxhr'爲空,但palaѕн解決方案爲我工作。 – mtoloo

+0

無論從任何原因,當我使用這個片段的居留制始終爲0。任何想法? – Dave

11

你可以做這樣的事情:

$(function() { 
    $.ajaxSetup({ 
     error: function(jqXHR, exception) { 
      if (jqXHR.status === 401) { 
       alert('HTTP Error 401 Unauthorized.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 
    }); 
}); 

這將在您的任何ajax通話趕上錯誤。使用.ajaxError()作爲一個全球性的方法http://api.jquery.com/ajaxError/

+2

它會在失敗的情況下,如果一個Ajax調用了'像'$就在選項中指定error'回調(網址:{url: '',錯誤:函數(){}})' –

1

嘗試將讓你的Ajax調用指定的全局選項。然而小心,因爲其他調用ajaxSetup()將覆蓋全局選項和指定的本地選項來ajax()方法將覆蓋全局設置。

Documentation

2

$.ajaxSetup()功能

2

搭上401狀態代碼只需添加

$.ajaxSetup({ 
    statusCode: { 
     401: function(err){ 
     console.log('Login Failed.', err.responseJSON); 
     // or whatever... 
     } 
    } 
    }); 

到你的頁面某處AJAX調用被觸發之前。