没有JSONP的JSON跨站点

时间:2011-08-16 11:51:51

标签: jquery json jsonp

我有一个本地硬件,我通过它的IP地址访问以检索json数据。

我正在创建一个基于网络的应用,但由于跨域问题,当应用在网络上运行时,它无法访问本地json数据。

是否有合适的解决方案可以将JSON数据提供给Web应用程序?

我正在使用jQuery在本地读取JSON文件。

硬件目前不提供JSONP。

提前致谢。

5 个答案:

答案 0 :(得分:4)

您可以使用PHP / ASP /等代理它。本地站点上的页面(在后端)将查询远程信息。这将允许您调用somesite.com/getForeignData(实际上调用othersite.com/foreignData)并将其返回到同一域中。

除此之外,您将需要使用JSONP(这是一个故意设置的边界)。 “最后”选项是在您的浏览器上启用跨境调用,但如果您希望其他人具有相同的能力,则这只是一个临时解决方案。

答案 1 :(得分:1)

您可以在HTTP响应中添加标头吗?如果是,请添加以下

Access-Control-Allow-Origin,其值为*

然后您的浏览器将允许该资源的请求

答案 2 :(得分:0)

您可以创建本地代理。

例如,如果您的网络应用程序在www.example.com上运行,请创建一个小型服务器端组件,并在www.example.com/hardware上进行响应。

然后,在调用此URL时,服务器端组件会对硬件执行直接查询,并将其返回给调用的webapp。

注意事项:

  • 如果响应很大或硬件很慢,您的代理可能需要缓冲很多。如果你想制作一个可扩展的解决方案,你必须要小心。
  • 您可以在代理处缓存数据以减少硬件负载
  • 您可以在将数据发送到代理中的Web应用程序之前按摩数据。例如,从JSON更改为XML,反之亦然。或者甚至预先将其格式化为HTML ...

答案 3 :(得分:0)

正如布拉德提到的,使用代理是可行的方法。以下是有关代理的更多信息:

http://developer.yahoo.com/javascript/howto-proxy.html

如果您可以访问php服务器,我可以通过http://www.troywolf.com/articles/推荐代理。您需要以下内容:

答案 4 :(得分:0)

如果您的网址看起来像这样 http://<IPAddress&GT; / RequestedJson 然后你可以使用flXHR这很方便。

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

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

ajaxOptions page中的更多信息)
4) 将crossdomain.xml放在你的ip的根目录中,即 http://<IPAddress&gt; /crossdomain.xml More info about crossdomain.xml

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

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

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