【问题标题】:Possible to use Javascript to get data from other sites?可以使用 Javascript 从其他网站获取数据吗?
【发布时间】:2011-02-07 05:39:36
【问题描述】:

是否有可能使用 Javascript 的网页从另一个网站获取数据?就我而言,我想用它来计算和绘制图表。但出于安全考虑,我不确定这是否可行。如果它被认为是不,但有解决方法,我会很感激被告知解决方法。如果可能的话,我不想在服务器端收集这些信息。

感谢任何和所有的帮助。

【问题讨论】:

    标签: php javascript web-services web-applications


    【解决方案1】:

    了解 JSONP 格式和跨站请求 (http://en.wikipedia.org/wiki/JSON#JSONP)。

    您可能需要在服务器端使用“PHP-proxy”脚本,该脚本将从网站获取信息并将其提供给您的 Javascript。

    【讨论】:

      【解决方案2】:

      唯一可靠的方法是让“你的”网络服务器充当代理。在 PHP 中,您可以使用 curl() 向外部站点发出 HTTP 请求,然后回显响应。

      【讨论】:

        【解决方案3】:

        由于same origin policy.,您无法从另一台服务器提取数据您可以采取一些技巧来解决它,例如将 URL 放在 <script> 标记中,但在您的情况下,它不适用于只是解析 HTML。

        使用simple_dom_html,解析您的数据服务器端。无论如何,这比用 JavaScript 做要容易得多。

        您可能能够做到这一点的一种简单方法是使用inline iframe。如果您从中获取数据的网页没有标题,或者您可以隔离被拉入的数据(例如图像或 SWF),这可能会起作用。

        【讨论】:

        • 如果您无法使用 Javascript 从另一台服务器提取数据,DoubleClick 如何保持业务?
        • @Robusto,与 Google 广告的做法相同。它们托管您拉入页面的 JavaScript 文件。此 JavaScript 会为您动态地将广告写入您页面上的 div 中。要么,要么您手动编写 iframe。远程 javascript 源 + Iframe != 从另一个页面提取数据。
        • 这不是从另一台服务器拉数据吗?
        • @Robusto,不,因为它正在编写 iframe。 iframe 本质上是另一个浏览器窗口。它的 javascript 与主框架中的 javascript 不在同一范围内运行。
        【解决方案4】:

        跨域 javascript 过去是不可能的,使用 (php-)proxy 是一种解决方法。

        jsonp 完全改变了这一点,它允许从另一台服务器请求 javascript(如果它有一个支持 jsonp 的 API,很多更大的网络播放器,如 google、twitter、yahoo,... 做),指定回调函数在您的代码中需要触发以对响应采取行动。

        javascript 中的响应将包含:

        • 对您定义的回调函数的调用
        • 作为 javascript 对象的实际负载。

        jquery offer easy support for jsonp out of the box 这样的框架。

        获得原始数据后,您可以将其绑定到 google chart tools 以动态创建图表并将其插入您的 web 应用程序中。

        【讨论】:

          【解决方案5】:

          还值得考虑的是支持XMLHttpRequest Access Control,它在一些现代浏览器中得到支持。

          如果您尝试通过网页访问的服务提供商进行了此设置,那么这是对 XMLHttpRequest 的非常简单的调用,您将无需 JSONP 即可访问该站点上的资源(尤其适用于非 GET 请求,即 POST、HEAD 等)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-10
            • 1970-01-01
            • 1970-01-01
            • 2013-06-10
            • 2011-04-26
            • 1970-01-01
            相关资源
            最近更新 更多