我有一个正在运行的 HTML5/JS 应用程序,我正在尝试将其移植到浏览器进行演示。该应用程序是为在车辆中运行而构建的,并使用车辆制造商的网络 API 来获取/发布请求。
对于这个的浏览器版本,我正在尝试使用 jQuery 来获取/发布。但是,我立即遇到了问题。
XMLHttpRequest cannot load http://<API I AM CALLING>. Origin null is not allowed by Access-Control-Allow-Origin.
我研究了同源政策,但仍然不完全理解。我可以浏览到正在使用的 URL,并查看我正在尝试检索的 JSON。
环顾网络,很多人建议在我的 ajax 调用中将 JSONP 指定为 dataType。我试了一下,没有成功。
$.ajax({
url: url,
type: "GET",
dataType: "jsonp",
success: function (data, textStatus, jqXHR) {
log("success getting JSON from " + url);
success(data);
},
error: function (jqXHR, textStatus, errorThrown) {
log("error getting JSON from " + url + ", code " + JSON.stringify(jqXHR));
log("textStatus is " + textStatus);
log("errorThrown is " + errorThrown);
},
});
我的控制台中出现错误:
Uncaught SyntaxError: Unexpected token :
之后,使用我的错误回调。
error getting JSON from http://<API I AM CALLING>, code {"readyState":4,"status":200,"statusText":"success"}
textStatus is parsererror
errorThrown is Error: jQuery180006523256213404238_1346098086632 was not called
看起来服务器正在响应我需要的 JSON 数据。但是,我猜测 jQuery 期望这些数据被包装在一个函数中,因此它无法解析它。
我无法控制我正在调用其 API 的服务器。由于数据正在返回浏览器,我觉得必须有某种方式来访问它。
注意:
App只针对webkit浏览器,其他的我不需要支持。将 dataType 保留为“json”只会导致 Chrome 出现问题,但由于不同的安全策略,Safari 似乎可以正常工作。寻找代码解决方法,而不是简单地使用特殊参数启动 Chrome。即使我在 Apache 上托管我的代码,Chrome 中仍然会发生这种情况,因此它不仅限于我尝试在本地打开 index.html。