【问题标题】:JSON cross site without JSONP没有 JSONP 的 JSON 跨站
【发布时间】:2011-10-28 00:18:11
【问题描述】:

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

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

是否有合适的解决方案使 JSON 数据可用于 Web 应用程序?

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

硬件目前不提供 JSONP。

提前致谢。

【问题讨论】:

    标签: jquery json jsonp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      Access-Control-Allow-Origin 的值为 *

      那么您的浏览器将允许对该资源的请求

      【讨论】:

      • 对于那些对这种方法感到好奇的人,它被称为CORS
      【解决方案3】:

      您可以创建本地代理。

      例如,如果您的 Web 应用程序在 www.example.com 上运行,则制作一个小型服务器端组件以响应 www.example.com/hardware。

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

      注意事项:

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

      【讨论】:

        【解决方案4】:

        正如 Brad 所说,使用代理是可行的方法。以下是有关代理的更多信息:

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

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

        【讨论】:

          【解决方案5】:

          如果您的网址看起来像这样 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

          【讨论】:

          • 如果您这样做,请不要尝试将 allow-access-from domain="*" 设置为,因为这将使您的网站开放,任何网站都可以阅读您的内容。问题是您必须将 crossdomain.xml 放在您的硬件设备上,这可能是不可能的。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-11
          • 2015-01-24
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          相关资源
          最近更新 更多