2017-05-03 61 views
3

後,我正試圖從我們的API獲取數據。該API已啓用CORS支持和返回響應OPTIONS請求以下:陣營原住民 - 製作取得與CORS API工作OPTIONS響應

Access-Control-Request-Headers:content-type 
Access-Control-Allow-Origin:* 

的API不允許超過'application/json'其他'Content-type'什麼。

使用這個限制,我想使用陣營本地的fetch方法來獲取數據。

方法1(無CORS):

{ 
    method: 'POST', 
    mode: "no-cors", 
    headers: { 
     'content-type': 'application/json' 
} 

在該方法中,瀏覽器自動發送內容類型爲 '文本/純'。我認爲這是因爲CORS默認只允許三個標題中的一個。但是,由於服務器不支持此內容類型,因此它將返回錯誤返回給不支持的內容類型。

方法2(含CORS或無):

{ 
    method: 'POST', 
    mode: "cors", // or without this line 
    redirect: 'follow', 
    headers: { 
     'content-type': 'application/json' 
    } 
} 
... 
.then(response => console.log(response)) 

在這種情況下,使用Chrome的F12網絡工具,我可以看到服務器返回的數據:到服務器的第一個請求是fetchOPTIONS。爲此,服務器回覆一個空對象以及上面的標題集。下一次調用是實際的POST API調用,服務器用適當的包含一些數據的JSON響應迴應該調用。但是,通過我的代碼獲取控制檯的響應是{}。我想這是因爲反應的fetch API將返回回OPTIONS調用,而不是實際POST呼叫的響應。

有沒有辦法忽略OPTIONS請求的響應,並獲得then方法來處理後續請求的響應?

回答

5

你打的是眼前的問題是,你作爲目前編寫的代碼所期望的響應是JSON但反應實際上是你需要爲了得到JSON處理的承諾。

所以你需要,而不是做這樣的事情:

fetch("https://example.com") 
    .then(response => response.json()) 
    .then(jsondata => console.log(jsondata)) 
相關問題