2013-03-14 33 views
7

那麼它的所有標題。我試圖執行破壞性操作之前檢查用戶的口令:jQuery AJAX調用202響應的錯誤回調 - 不應該是成功的回調?

$.ajax({ 
    type: 'POST', 
    url: '/path/to/post.json', 
    data: { password: '**********' }, 
    success: function() { console.log("Success!"); }, 
    error: function() { console.log("Error!"); } 
}); 

在控制檯:

202 Accepted 123ms 
Error! 

我認爲403禁止錯誤密碼,202接受了正確的密碼將是適當的響應代碼,但我不太瞭解HTTP的說法。

的jQuery 1.8.3版本

+0

由於202的狀態,錯誤回調未被觸發,但是由於將響應解析爲JSON(最有可能)時出錯。您是否使用有效的json進行響應? (空身是無效的JSON)無效的密碼可能是401或400,因爲它的實用性。 – Esailija 2013-03-14 17:00:58

+0

我這麼認爲?響應只是一個字符串。在控制檯中,它看起來像「密碼無效」。它是否需要成爲鍵/值對? – AJcodez 2013-03-14 17:04:01

+0

我不認爲202與「正確的密碼」有關。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html – 2013-03-14 17:04:31

回答

9

由於202的狀態而導致錯誤回調未被觸發,但是由於在將響應解析爲JSON時出錯。對於jQuery,2xx304是成功的。

如果響應正文是Invalid Password那是無效的json,並在它試圖解析它時觸發jQuery錯誤。一個正確的JSON字符串在它周圍有引號,如"Invalid Password"。您應該使用JSON序列化程序對您的響應進行JSON編碼,而不是手動構建json,您可以看到它很容易出錯。

+4

另一個原因是當請求主體爲空時,則jQuery調用錯誤回調。 – 2013-07-27 00:55:28

+0

那麼在這種情況下回復的最佳做法是什麼?一個無用的字符串?一個空的清單?編寫我的後端以發送一些垃圾數據時感覺很愚蠢。 – 2017-07-30 21:30:43

0

沒關係,得到了它與

statusCode: { 
    202: function() { console.log("Success!"); }, 
    403: function() { console.log("Error!'); } 
} 

代替successerror回調的工作。儘管如此,還是有點莫名其妙地觸發了這個錯誤。

相關問題