2017-07-10 87 views
1

我找到簡單的教程如何使跨域JSON電話here跨域JSON - 請問服務器提供的源是什麼?

而且這工作完全正常,所以我決定用這個例子,只是從改變網址:

VAR URL =「http://api.myjson.com/bins/23xvb 「;

var url = "http://dl.sniper.pl/test.json" 

不幸的是改變它返回這樣的錯誤(在鉻):

的XMLHttpRequest不能加載http://dl.sniper.pl/test.json。對 預檢請求的響應未通過訪問控制檢查:否 「所請求的 資源上存在」Access-Control-Allow-Origin「標頭。因此不允許原產地'null'訪問。

谷歌搜索的錯誤didnt提供任何答案找到一個解決方案,因此這裏的問題:爲什麼 我得到這樣的錯誤,以及如何解決呢?

回答

0

http://dl.sniper.pl/服務器必須配置爲響應發送Access-Control-Allow-Origin響應頭爲請求http://dl.sniper.pl/test.json

但由於該服務器未發送Access-Control-Allow-Origin響應標頭,因此您的瀏覽器拒絕讓您的前端JavaScript代碼訪問該響應。

因此,您要麼配置http://dl.sniper.pl/服務器發送Access-Control-Allow-Origin否則您可以通過CORS代理髮出請求。

有一個開放的CORS代理,你可以讓你改變你的代碼,這個請求通過:

var url = "https://cors-anywhere.herokuapp.com/http://dl.sniper.pl/test.json" 

這將通過開放CORS代理https://cors-anywhere.herokuapp.com它增加了Access-Control-Allow-Origin響應頭給它的請求,然後通過返回到請求的前端代碼作爲響應。

響應頭是Access-Control-Allow-Origin響應頭是瀏覽器看到的,所以瀏覽器允許您的前端JavaScript代碼實際訪問響應。

您還可以輕鬆設置使用https://github.com/Rob--W/cors-anywhere/

爲瀏覽器的行爲的解釋請參見https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS自己CORS代理,當您發送使用XHR或獲取從JavaScript API或AJAX方法的JavaScript代碼跨域請求前端庫 - 以及有關爲了讓瀏覽器允許前端代碼訪問響應而必須接收哪些響應頭的詳細信息。

+0

謝謝你的簡單但很好的解釋。我用我的代碼你的代理網址,它的工作原理,但我不想依賴第三方服務器,仍然不能通過.htaccess它。我在服務器上創建了一個目錄,並放置了像這裏的botth json文件和.htaccess:https://benjaminhorn.io/code/setting-cors-cross-origin-resource-sharing-on-apache-with-correct-response-標題,允許一切通過/ 它仍然無法正常工作。我應該在大多數父目錄中的.htaccess中更改它嗎? – Kalreg

+0

如果您使用Apache設置您的Access-Control - \ *標頭,您可能需要運行'a2enmod標頭'開始排除故障,確保啓用了標頭模塊。但無論如何,如果這不起作用,你可能想創建一個單獨的新問題並用'apache'標記它 - 因爲你現在需要幫助的是一個與一般問題不同的更具體的問題在這裏的問題中描述。 (你可以從Apache專家那裏獲得更多具體的幫助,把它作爲一個單獨的問題並加上標籤。) – sideshowbarker

+0

這可能是apache的問題,但是我只是服務器的最終用戶,而我不有任何priviliges更改apache設置。我可能可以測試這些設置,但我不知道我該怎麼做。你能幫忙嗎? – Kalreg

0

你應該配置您的服務器待辦事項這在你的htaccess u需要像這樣

<RequireAll> Require all granted </RequireAll>

+0

不幸的是,這並不會改變任何東西 – Kalreg

+0

如果您使用chrome,您必須給予時間改動ü需要清除所有關於此域的cookie,只需在此處諮詢Apache文檔; https://httpd.apache.org/docs/2.4/howto/access.html – demopix

+0

我已經清除了所有的cookies,結果仍然相同:/ – Kalreg