2015-11-07 70 views
0

我想在JavaScript中進行跨域API調用。跨域API調用

我已經嘗試使用JSONP的角度$ http,但API服務器不支持JSONP,只有json。 使用JSONP我收到「意外令牌」錯誤。 Fiddler顯示請求成功並獲取正確的json對象。 有沒有辦法繞過錯誤並獲得提琴手獲取?

作爲一種替代方法,我嘗試使用XMLHttpRequest的CORS,如here所述。 請求失敗,請求的資源上出現通常的「No」Access-Control-Allow-Origin'標頭。「 然而,提琴手顯示該請求成功返回代碼200.

我不明白這一點。 爲什麼小提琴手說返回代碼是200,但CORS呼叫失敗?

此外,我可以從我的瀏覽器(firefox和chrome)訪問API網址,沒有問題。該API是公開的,並且不需要授權。

回答

1

我不明白這一點。爲什麼小提琴手說返回代碼是200,但CORS調用失敗?

因爲它是執行SOP的瀏覽器。因此,您提出請求後,服務器發回響應,瀏覽器查看響應,並說「不,我不允許此代碼提供該響應。」

如果另一端不支持來自您的來源的CORS請求,並且它們不支持JSONP,則必須通過代理:例如,如果您的解決方案有服務器,請發送您的請求到您的服務器並讓您的服務器從遠程API請求數據,然後將其發回給您。

另外,我可以在瀏覽器(firefox和chrome)中訪問API url,沒有問題。

這是因爲當您在地址欄中輸入地址時,您沒有發出ajax請求,並且SOP不適用。

API是公開的,不需要授權。

聯繫他們並詢問他們是否支持CORS或JSONP,並且您在文檔中錯過了某些內容以啓用它。但請注意,有幾個公開API可能是公開的,但不支持CORS或JSONP。它們可能用於桌面或服務器使用,而不是ajax。

+0

這很有幫助,謝謝。我將調查代理選項。 – hholtij