2017-09-20 324 views
1

我使用這個代碼使API請求:爲什麼這個HTTP請求失敗?

function httpGet(url){ 
var request = new XMLHttpRequest(); 
request.onreadystatechange = function() { 
    console.log(this.status) 
    if (this.readyState == 4 && this.status == 200) { 
     console.log("Got names") 
     getNamesFromJSONArray(request.responseText); 
    }; 
}; 
request.open("GET", url, true); 
request.setRequestHeader("Authorization", "Basic (API key goes here)"); 
request.setRequestHeader("Accept-Encoding", "gzip"); 
request.send(); 
} 

它的工作只是一天,但現在失敗了,告訴我:

無法加載資源:預檢響應不成功

的XMLHttpRequest不能LOA d https://api.insight.ly/v2.1/contacts。 預檢反應不成功

另外,「Got names」從未打印過。

這段代碼爲什麼會在前一天工作時崩潰?這是API端還是我的問題?

更新! 我在api網站上找到了this。實現這個最簡單的方法是什麼?我目前沒有後端,除此之外不需要任何東西。我理解這個問題是因爲他們不希望我的API使用客戶端可讀的Javascript,這很有道理。我是否可以用其他方式登錄到API,可能是用戶的電子郵件和密碼?

+0

聽起來像是一個CORS問題給我。您可能需要發送正確的訪問標題。 –

+0

@ObsidianAge那麼爲什麼它在幾天前工作? –

+0

有關此處發生的情況的說明,請參閱https://stackoverflow.com/a/45533146/441757或https://stackoverflow.com/questions/45586064/receive-oauth2-token-from-xhr-request/45586285# 45586285或https://stackoverflow.com/questions/45210184/why-is-my-drupal-8-cors-setup-not-working/45312903#45312903(標記爲重複的問題遺憾地沒有答案實際上就這種情況的所有行爲進行了解釋,就我所見)。要點是:'https:// api.insight.ly/v2.1/contacts'端點需要對OPTIONS請求進行授權。它不應該。 – sideshowbarker

回答

0

該API需要能夠(正確)處理CORS,具體而言,您的問題是關於預印

在進行實際的CORS調用之前,它將使用OPTIONS方法嘗試相同的調用,以確保它的安全性。服務器預計會爲此返回某些標頭。

所以是的,這是在API方面。

您可以閱讀關於HTTP access control (CORS)的更多信息

+0

感謝您的回答!我看着這個併發布了一個更新我的問題。有什麼建議? –

+0

對我來說,他們已經回答了你的問題。不,你不能使用CORS(你不能直接調用這個API),而且他們已經給了你一個選項,這就是編寫一個代理。 –