0

我正在寻找一种方法来允许浏览器托管的 JS 应用程序向运行在不同端口上的服务器发出请求,并且可能与最初为 JS 应用程序提供服务的机器不同。

我正在从我的 Mac OS X Apache Web 服务器提供一个简单的 JavaScript (HTML5) 应用程序。我希望能够在 Windows、Android 和 OS X 的尽可能多的浏览器中运行这个应用程序。但我会满足于每个浏览器。

我的 JavaScript 应用程序使用 XMLHttpRequest 向返回 JSON 的最小自定义服务器发出请求。

因此,例如,我的 JS 应用程序可以在http://10.0.1.3/poc/dashboard.html

我的自定义服务器在同一台机器上运行,监听端口 49379 ......这样的请求http://10.0.1.3:49379/find?name=Fred将返回一组元组,其中 'name' 等于 '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);

我得到这两个错误:

  1. 拒绝设置不安全的标头“User-Agent”

  2. XMLHttpRequest 无法加载http://10.0.1.3:49379/find?name=Fred。Access-Control-Allow- Originhttp://10.0.1.3不允许 Origin。

我可以控制 Apache 服务器、JavaScript 和自定义服务器。这只是一个概念证明,将在孤立的网络上进行演示。所以,我不关心安全问题。

另外,我在 Chrome、Firefox、Safari 中运行。所有这些似乎都使用 XMLHttpRequest2 对象。

4

1 回答 1

1

I have found the way to get around CORS is to use jsonp - which is json with a callback function - I've never used it with XMLHttpRequest, but it works with jQuery ajax functions like $.getJSON. In your url query string simply add the parameter jsoncallback=? and voila, no more CORS problems. $.getJSON dynamically assigns its success parameter to the callback function.

于 2013-03-07T18:15:11.977 回答