![](/img/trans.png)
[英]Javascript: XMLHttpRequest problem with Cross-Origin Resource Sharing
[英]Cross-Origin Resource Sharing from browser-hosted JavaScript app to custom server
我正在尋找一種方法,以允許瀏覽器托管的JS應用程序向運行在端口和(可能是)與最初服務JS應用程序的機器不同的計算機上的服務器發出請求。
我正在從Mac OS X Apache Web服務器提供一個簡單的JavaScript(HTML5)應用程序。 我希望能夠在Windows,Android和OS X上的盡可能多的瀏覽器中運行該應用程序。但是我會選擇每種應用程序。
我的JavaScript應用程序使用XMLHttpRequest來請求返回JSON的最小自定義服務器。
因此,例如,可以從http://10.0.1.3/poc/dashboard.html
訪問我的JS應用
並且我的自定義服務器在同一台計算機上運行,偵聽端口49379 ...像這樣的請求http://10.0.1.3:49379/find?name=Fred
將返回一組元組,其中“名稱”等於“ Fred” 。
如果我直接在導航工具欄中輸入此請求,那么我會得到理想的結果。
如果我在JS中提出相同的請求,則會遇到一些錯誤。
var theXHR = new XMLHttpRequest();
theXHR.onreadystatechange = onReadyStateHandler;
theXHR.open("GET", "http://" + ipAddress + ":49379/find?name=Fred", true);
theXHR.setRequestHeader("User-Agent", "XMLHTTP/1.0");
theXHR.send(null);
我收到以下兩個錯誤:
拒絕設置不安全的標題“ User-Agent”
XMLHttpRequest無法加載http://10.0.1.3:49379/find?name=Fred
。 Access-Control-Allow-Origin不允許使用來源http://10.0.1.3
。
我可以控制Apache服務器,JavaScript和自定義服務器。 這只是概念證明,將在隔離的網絡上進行演示。 因此,我不關心安全問題。
另外,我在Chrome,Firefox,Safari中運行。 所有這些似乎都使用XMLHttpRequest2對象。
我發現解決CORS的方法是使用jsonp-帶有回調函數的$.getJSON
我從未將它與XMLHttpRequest一起使用,但是它可與$.getJSON
類的jQuery ajax函數$.getJSON
。 在您的url查詢字符串中,只需添加參數jsoncallback=?
瞧,不再有CORS問題了。 $.getJSON
將其success
參數動態分配給回調函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.