在jquery中获取外部URL的html

时间:2010-10-01 08:52:22

标签: jquery html url

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

6 个答案:

答案 0 :(得分:19)

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

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

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

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

答案 1 :(得分:6)

您需要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);
   });

修改:仅当您的网页位于同一个网域时才有效。

答案 2 :(得分:3)

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

您与same origin policy绑定。

答案 3 :(得分:3)

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

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

您还可以在后端代码中缓存外部网站HTML,以便来自Javascript的请求并不总是会产生两个HTTP请求 - 当然,所有这些都取决于您要抓取的HTML的更改频率。

上面的一个小问题是在服务器上运行后台任务,每隔X秒检索一次外部HTM并将其保存在本地。从您的JS请求您的域只需从您的服务器获取最新的副本。这意味着您的JS请求不会因等待另一个外部HTTP请求而变慢。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

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