jQuery加载外部网页页面

12

如何从外部网站加载单个页面?

我试图显示单个页面,但似乎无法使其正常工作。

$("#response").load("http://domain.com", function(response, status, xhr) {
   if (status == "error") {
      var msg = "Sorry but there was an error: ";
      alert(msg + xhr.status + " " + xhr.statusText);
   }
 });

希望能得到帮助,非常感激。


1
是的,这是可能的,但你需要1行PHP代码 :) - Roko C. Buljan
请看这里 - http://en.wikipedia.org/wiki/Cross-origin_resource_sharing 和这里 http://msdn.microsoft.com/en-us/library/windows/apps/hh767443.aspx - Bakudan
如果你只需要 RSS 订阅,而且不介意依赖 Google,你可以使用 jquery-feeds - the
2个回答

24
你遇到了一个跨域策略问题,因为出于安全原因,AJAX不允许你从不在同一域上的页面获取内容。
要解决这个问题并完成任务,你需要一个PHP文件,可以只包含以下这行PHP代码调用grabber.php:
<?php echo file_get_contents($_GET['url']); ?>

在你的HTML(或任何文件)中,只需像这样操作:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <meta charset=utf-8 />
    <title>test</title>
</head>
<body>

    <div id="response"></div>

</body>

<script>
$(function(){
    var contentURI= 'http://domain.com #element';    // URL TO GRAB + # of any desired element // if needed :)
    $('#response').load('grabber.php?url='+ contentURI);
});
</script>

</html>

这为什么有效呢?

  • 现在,AJAX正在向grabber.php页面发送一个简单的GET请求,
  • grabber.php回显所需内容
  • 现在该内容位于您的(服务器)域上!
  • 而AJAX很高兴为您提供服务 :)

1
这很棒。不过有一个问题。我注意到很多网站在抓取后会丢失它们的绝对路径。你知道如何抓取页面并保持其完整性的一些建议吗? - barrylachapelle
1
@andehlu 您可以将加载的内容添加到一个 iframe 中,这样可以保持路径的顺序。 - Wessam El Mahdy
@WessamElMahdy 这取决于您是想欣赏加载的页面还是想对加载的元素进行一些实际操作... - Roko C. Buljan
这些评论涉及到我的问题,即加载的页面内容是一个框架集,而框架集内容会失去其绝对路径,导致“页面未找到”或“对象未找到”错误成为唯一的内容。 - TARKUS
请注意,使用此解决方案时,第二个URL的服务器将看到您服务器的IP而不是客户端的IP。 - DrLightman

1

你是不是在尝试从不同的域名加载页面?

如果是的话,那么似乎你遇到了跨域策略的问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接