没有JSONP的JSON跨站点
我有一个本地硬件,我通过它的IP地址访问,以检索json数据。
我正在创建一个基于Web的应用程序,但由于跨域问题,当应用程序在Web上运行时,它无法访问本地json数据。
是否有合适的解决方案使JSON数据可用于Web应用程序?
我正在使用jQuery在本地读取JSON文件。
硬件目前不提供JSONP。
提前致谢。
您可以使用PHP / ASP /等代理它。 本地站点上的页面(在后端)将查询远程信息。 这将允许您调用somesite.com/getForeignData(实际上调用othersite.com/foreignData)并在同一域中返回它。
除此之外,您将需要使用JSONP(这是一个故意设置的边界)。 “最后”选项是在您的浏览器上启用跨境调用,但如果您希望其他人具有相同的能力,则这只是一个临时解决方案。
您可以在HTTP响应中添加标头吗? 如果是,请添加以下内容
Access-Control-Allow-Origin
值为*
然后您的浏览器将允许该资源的请求
您可以创建本地代理。
例如,如果您的网络应用程序在www.example.com上运行,请创建一个小型服务器端组件,以便在www.example.com/hardware上进行响应。
然后,在调用此URL时,服务器端组件会对硬件执行直接查询,并将其返回给调用的webapp。
注意事项:
- 如果响应很大或硬件很慢,您的代理可能需要缓冲很多。 如果你想制作一个可扩展的解决方案,你必须要小心。
- 您可以在代理上缓存数据以减少硬件负载
- 您可以在将数据发送到代理中的Web应用程序之前按摩数据。 例如,从JSON更改为XML,反之亦然。 或者甚至预先将其格式化为HTML …
正如布拉德提到的使用代理是要走的路。 以下是有关代理的更多信息:
http://developer.yahoo.com/javascript/howto-proxy.html
如果您可以访问php服务器,我可以通过http://www.troywolf.com/articles/推荐代理。 你需要以下内容:
如果您的url看起来像这样的http://
1)导入flXHR的库
2)只需创建一个flXHR实例
3)然后将其分配给jQuery Ajax选项
$.ajaxSetup({ "xhr": myflXHRInstance });
( ajaxOptions页面中的更多信息)
4)将crossdomain.xml放在ip的根目录即http://
5)通过jQuery享受您的跨域请求))
PS需要安装Flash插件。 几乎没有安装Flash Player插件的浏览器。 Riastats
编辑:对不起crossdomain.xml的俄语链接。
Crossdomain.xml示例