2010-10-18 50 views
0

我的web服務器不管是什麼返回JSON響應任何Ajax請求。如果響應成功,則返回狀態碼爲200的json。如果出現錯誤,它將返回狀態碼爲400或500的json。我需要獲取該信息,即使請求是400或500,因爲json響應具有錯誤消息,需要將其呈現給用戶。正從一個Ajax請求,jQuery中的錯誤響應

的問題是,jQuery的$就功能不給你訪問響應對象,如果狀態碼不是200,是否正確?有沒有辦法做到這一點?

+2

如果你是一個錯誤消息返回JSON你應該用HTTP狀態200返回它,這意味着HTTP請求是成功的,但業務時發生錯誤。 – 2010-10-18 17:41:43

回答

2

確實如此。該success函數被調用,只有當調用成功,但是當有許多人錯誤的error回調被稱爲 - 包括超過200

$.ajax({..., error: function(XMLHttpRequest, textStatus, errorThrown) { ... } }); 
+1

這是不一樣的,因爲你在這裏沒有像'成功'這樣的JSON對象。 – 2010-10-18 17:45:30

+0

哦。完全正確。我誤解了這個問題。我同意klausbyskov的觀點,即在服務器仍然可以生成有效的JSON響應的情況下返回非200 HTTP狀態代碼的想法有點令人不安。 – VoteyDisciple 2010-10-18 18:04:31

+0

@VoteyDicipline,那麼執行此操作的正確方法是什麼?用戶試圖觸發ajax POST請求,但請求包含無效數據,響應代碼應該不是200,是正確的?在json的某個地方返回200響應「錯誤」似乎更加錯誤,IMO。 – priestc 2010-10-18 18:11:40

3

其他HTTP狀態,您可以覆蓋內部使用,以確定是否jQuery.httpSuccess method一個請求成功,例如:

jQuery.httpSuccess = function() { return true; } 

這將讓你的success處理器在400/500範圍甚至執行上的狀態碼。

注意:稍後可能會更改爲jQuery.ajax.httpSuccess

+0

+1,有趣的東西.. – 2010-10-18 17:56:12

0

您可以輕鬆地檢索:

$.ajax({ 
    // your options 
    success: function(data, xhr) { 
     alert(xhr.status); 
    } 
}); 
+0

'success'不會被調用時的狀態代碼以外的任何其他200 – priestc 2010-10-18 18:12:56

+0

嗯,我說不行,其他的狀態被認爲是成功的,請參閱:'// IE錯誤有時返回1223當它應該是204,從而把它當作成功,看到#1450 \t \t \t回xhr.status && location.protocol === 「文件:」 || \t \t \t \t xhr.status> = 200 && xhr.status <300 || \t \t \t \t xhr.status === 304 || xhr.status === 1223;' – 2010-10-18 18:25:18