2014-11-02 111 views
0

編輯:我剛剛意識到這是Recommended solution for AJAX, CORS, Chrome & HTTP error codes (401,403,404,500)的重複,他嘗試了我最後提出的想法。但我不知道他是否成功了(用戶不知道),也沒有其他人發佈解決方案或評論,所以我認爲值得去尋找新的答案。如何處理CORS錯誤代碼?

問題:

  • 我發送一個正確執行的(編輯:不當執行的故事的結局......)CORS請求。
  • 服務器收到請求並嘗試對其進行處理。
  • 服務器返回錯誤響應,例如422 Unprocessable Entity,以及有關錯誤的JSON信息。這個想法是,我的應用程序可以收到這個錯誤信息,並在UI中適當地處理它。
  • 瀏覽器阻止我的錯誤處理程序獲取響應內容,甚至獲取狀態碼。

顯示在瀏覽器接收到的401狀態碼,但把它作爲一個CORS安全錯誤:

Status Code 401

響應對象,顯示出我的代碼不能訪問響應數據(data: ""status: 0 ):

Obscured Response Object

怎麼會有其他人的手領導這個限制?我現在最好的猜測是劫持HTTP「成功」代碼(2XX)作爲錯誤代碼,然後在響應中包含錯誤信息。這可以防止我以常規方式使用ajax錯誤處理程序,但是我將它作爲全局ajax過濾器處理,因此此過濾器將捕獲異常成功代碼並觸發錯誤處理程序。

+0

鏈接確實有它另一個答案,順便說一句。我無法分辨你是否試圖修復錯誤或只是簡單地捕捉錯誤。 – 2014-11-02 01:21:37

回答

2

控制檯消息指示服務器在發送401響應代碼時未發送所需的Access-Control-Allow-Origin標頭。

除非您解決該問題,否則您將無法使用CORS錯誤處理程序將內容注入DOM。

服務器很可能在響應中正確地發送標題,並帶有200個響應代碼。但是,如果您希望使用這些響應代碼中的數據,則需要爲其他響應代碼執行此操作。

修復在客戶端進行設計妥協之前在服務器端。這可能會立即解決您的問題。

+0

我說這是一個正確執行的CORS請求。當服務器響應成功代碼時,瀏覽器會正確處理它。 – colllin 2014-11-02 01:26:31

+2

服務器正在成功發送必要的標題。它也需要發送失敗。 – Trott 2014-11-02 01:27:24

+4

換句話說,如果您希望使用200以外的響應代碼中的JSON數據,則需要在200以外的響應代碼上發送CORS頭。 – Trott 2014-11-02 01:35:13