2013-10-01 60 views
2

在我的代碼中,我從另一個域的另一個服務器獲取一些JSON與jQuery,並在瀏覽器中得到一個錯誤。配置括號服務器,以避免訪問控制,允許來源錯誤

XMLHttpRequest cannot load http://url_containing_json.com. Origin http://localhost:53651 is not allowed by Access-Control-Allow-Origin 

配置支架服務器容易嗎?或者我需要建立自己的服務器才能做到這一點?

回答

0

此限制來自網絡瀏覽器,而不是服務器。它被稱爲same-origin security policy(又名同域政策)。

什麼是http://url_containing_json.com「JSON服務器」有問題?它是一個你有一定控制權的服務器嗎?如果是這樣,那麼你可以:

A)上傳你的代碼到「JSON服務器」本身,所以你的網站是從同一個域服務;或

B)上傳你的代碼,其他一些臨時服務器,並使用CORS的JSON服務器上基本上白名單臨時服務器的域名(JSON的服務器將提供一個Access-Control-Allow-Origin HTTP標頭,如錯誤消息中提到)。

在另一方面 - 如果「JSON服務器」完全是第三方的,它實際上其他網站像你要取它的JSON?如果是這樣,那麼它應該已經支持CORS(帶有一攬子允許所有策略)或JSONP(允許訪問的一種較老的方式,儘管您的請求需要設置稍微不同)。

如果JSON服務器不允許允許跨域請求,則您有最後一招:使用您自己的站點的服務器作爲代理。您的頁面不是直接ping JSON服務器,而是ping自己的服務器,然後代表頁面上的JSON服務器。

所有這些方法都需要運行您自己的服務器,而不是使用內置的「本地主機」服務器。您可以通過文件>項目設置...指向您自己的服務器,但請注意,這將禁用Live HTML Development等某些功能。 (儘管如果你能夠使用上面的選項「B」,你可能會破解你的hosts文件,繼續使用內置的支架服務器,而不是通過改變其明顯的域名)。

希望有幫助!

+1

因此,在我發佈之前研究這個問題時,它似乎是通過服務器添加頭部的問題,如下面的鏈接,因此我認爲有一些方法可以通過Brackets中的內部服務器來實現,但我不知道如何訪問它或它的生活。對我使用括號的全部意義在於實時預覽功能,所以知道如何配置它的內部服務器會很高興http://stackoverflow.com/questions/5008944/how-to-add-an-access-control -allow-origin-header –

+0

不幸的是,這是另一種方式 - 你需要添加一個頭到服務器_you're contacts_。這種情況下的「JSON服務器」。如果您不控制該服務器並且它不想讓您訪問(即,它不提供該標頭或基於JSONP的API),那麼您的選項非常有限。即使在生產中也是如此。 – peterflynn

+0

您是否介意詢問您要聯繫的服務器? – peterflynn

0

碰到完全一樣的問題。我解決這個問題的方法是使用jsonp ajax請求類型,使用$ .ajax()調用的dataType參數。 查看JQuery documentation這個電話。

相關問題