【发布时间】:2011-10-28 00:18:11
【问题描述】:
我有一个本地硬件,我通过它的 IP 地址访问它以检索 json 数据。
我正在创建一个基于 Web 的应用程序,但由于跨域问题,当应用程序在 Web 上运行时,它无法访问本地 json 数据。
是否有合适的解决方案使 JSON 数据可用于 Web 应用程序?
我正在使用 jQuery 在本地读取 JSON 文件。
硬件目前不提供 JSONP。
提前致谢。
【问题讨论】:
我有一个本地硬件,我通过它的 IP 地址访问它以检索 json 数据。
我正在创建一个基于 Web 的应用程序,但由于跨域问题,当应用程序在 Web 上运行时,它无法访问本地 json 数据。
是否有合适的解决方案使 JSON 数据可用于 Web 应用程序?
我正在使用 jQuery 在本地读取 JSON 文件。
硬件目前不提供 JSONP。
提前致谢。
【问题讨论】:
您可以使用 PHP/ASP/等代理它。您本地站点上的页面(在后端)将查询远程信息。这将允许您调用 somesite.com/getForeignData(实际上调用 othersite.com/foreignData)并在同一个域中返回它。
除此之外,您还需要使用 JSONP(这是特意设置的边界)。 “最后”选项是在你的浏览器上启用跨界调用,但如果你希望其他人也有同样的能力,这只是一个临时解决方案。
【讨论】:
您可以在 HTTP 响应中添加标头吗?如果是,请添加以下内容
Access-Control-Allow-Origin 的值为 *
那么您的浏览器将允许对该资源的请求
【讨论】:
您可以创建本地代理。
例如,如果您的 Web 应用程序在 www.example.com 上运行,则制作一个小型服务器端组件以响应 www.example.com/hardware。
然后,在调用此 URL 时,服务器端组件执行对硬件的直接查询并将其返回给调用 Web 应用程序。
注意事项:
【讨论】:
正如 Brad 所说,使用代理是可行的方法。以下是有关代理的更多信息:
http://developer.yahoo.com/javascript/howto-proxy.html
如果您可以访问 php 服务器,我可以通过http://www.troywolf.com/articles/ 推荐代理。您将需要以下内容:
【讨论】:
如果您的网址看起来像这样 http://<IPAddress>/RequestedJson 那么你可以使用flXHR,非常方便。
1) 导入flXHR的库
2) 只需创建一个 flXHR 的实例
3) 然后将其分配给 jQuery Ajax 选项
$.ajaxSetup({
"xhr": myflXHRInstance
});
(更多信息在ajaxOptions page)
4)
将 crossdomain.xml 放在您 ip 的根目录中,即
http://<IPAddress>/crossdomain.xml More info about crossdomain.xml
5) 通过 jQuery 享受您的跨域请求))
附:需要安装 flash 插件。几乎没有没有安装 Flash 播放器插件的浏览器。 Riastats
编辑:对不起,crossdomain.xml 的俄语链接。
Crossdomain.xml example
【讨论】: