【问题标题】:get html of external url in jquery在jquery中获取外部url的html
【发布时间】:2012-11-30 22:16:30
【问题描述】:

如何使用 jquery 获取外部 URL 的 HTML?

【问题讨论】:

    标签: jquery html url


    【解决方案1】:

    简短的回答是你不能,因为 AJAX 请求被 Same Origin Policy 限制在同一个(子)域和端口。

    同样的限制适用于iframe 元素:您不能创建指向外部页面的iframe,并从那里获取其HTML。

    通常的方法是使用服务器端脚本(例如用 PHP 编写)作为代理:它获取外部站点的内容并将其返回给 JavaScript。它必须与页面在同一个域上运行。

    显然,使用此解决方案,对 URL、图像、样式表等(例如 ../images/image.gif)的相对引用将不再起作用,因为它们在您的页面上与上下文无关。无法判断这是否是您的情况的问题。一种解决方法可能是使用<base> tag

    【讨论】:

    • @KushalJayswal 这正是我提到的那种“充当代理的服务器端脚本”。它带来了许多问题,其中一个问题是该站点当前处于离线状态,这可能是由于负载过重。对于任何类型的专业用途,该服务离“我们可以做到”还很遥远
    【解决方案2】:

    你需要 jquery $.get

    http://api.jquery.com/jQuery.get/

    示例:使用额外的数据负载(HTML 或 XML,取决于返回的内容)发出请求 test.cgi 的结果。

    $.get("test.cgi", { name: "John", time: "2pm" },
       function(data){
         alert("Data Loaded: " + data);
       });
    

    编辑:这仅在您的页面位于同一域中时才有效。

    【讨论】:

    • 也不可能:由于同源策略,父 JavaScript 将无法访问 iframe 的 HTML
    • 所以根本没有解决方案:)
    【解决方案3】:

    这是最简单的形式 - 你不能。

    您已绑定same origin policy

    【讨论】:

    • 可以禁用。
    【解决方案4】:

    您可以使用 $.ajax 或 $.get 调用您自己域中的 URL,然后使用您正在使用的任何服务器端语言来检索 HTML,然后返回它。

    这是两个 HTTP 请求而不是一个,但它会解决您的问题。

    您还可以在后端代码中缓存外部站点 HTML,这样来自 Javascript 的请求并不总是会导致两个 HTTP 请求 - 当然,这一切都取决于您想要获取的 HTML 更改的频率。

    上面的一个小改动是在您的服务器上运行一个后台任务,该任务每 X 秒检索一次外部 HTMl 并将其保存在本地。来自您的 JS 对您的域的请求只是从您的服务器中获取最新的副本。这意味着您的 JS 请求不会因等待另一个外部 HTTP 请求而减慢。

    【讨论】:

      【解决方案5】:

      由于同源策略,所有常见浏览器都不允许 Javasript 调用访问具有另一个(子)域的任何页面。解决此问题的唯一方法是在您自己的服务器(例如 php 脚本)上设置某种“代理”,该服务器在同一域下运行,从第三个来源获取您想要的信息并将它们打印出来。

      【讨论】:

        【解决方案6】:

        您可以将 PHP 或任何其他服务器端语言添加到您的网站,以充当您的脚本的代理来获取页面 html。

        然后,您可以使用 Ajax 使用该 url 调用您的服务器端代理,这将返回该页面的 HTMl。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-24
          • 2020-02-15
          • 1970-01-01
          • 2011-07-14
          • 2017-04-23
          • 2012-01-22
          • 1970-01-01
          相关资源
          最近更新 更多