没有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:// / RequestedJson,那么您可以使用非常方便的flXHR 。

1)导入flXHR的库
2)只需创建一个flXHR实例
3)然后将其分配给jQuery Ajax选项

 $.ajaxSetup({ "xhr": myflXHRInstance }); 

( ajaxOptions页面中的更多信息)
4)将crossdomain.xml放在ip的根目录即http:// /crossdomain.xml 有关crossdomain.xml的更多信息

5)通过jQuery享受您的跨域请求))

PS需要安装Flash插件。 几乎没有安装Flash Player插件的浏览器。 Riastats

编辑:对不起crossdomain.xml的俄语链接。
Crossdomain.xml示例