2011-06-13 105 views
1

我需要在我的网站中显示另一个外部网站的内容。通常<iFrame>标签可以做到这一点。但我的要求不是全部内容,只是该网站的一部分。例如,该网站的布局有3个部分,<div id="header">,<div id="sidebar">,<div id="content"。我的意思是我只想显示"id=content"部分。我该怎么做?我试过$("$my-content").load("http://www.anothersite.com #load-content"),但不能正常工作。加载外部网站的内容

回答

6

这是由于AJAX跨域安全限制,一个诀窍是从服务器设置代理脚本 ,该代理脚本从不同站点(域)下载内容并将该代理用作JavaScript中的参考。

例子:(proxy.php)

<?php 
    $url = 'http://www.anothersite.com'; 
    $htm = file_get_contents($url); 
    echo $htm; 
?> 

然后在你的脚本,而不是:

$("$my-content").load("http://www.anothersite.com #load-content"); 

使用代理:

$("$my-content").load("proxy.php #load-content"); 
+0

但不会破目标网页包含非绝对网址和相关链接时的布局? – Mori 2013-11-29 06:46:03

0

最直接的(和跨浏览器)方式是编写一个服务器端程序(使用PHP或Perl),它位于服务器上,并且在本地调用,然后从远程站点获取所需内容。

如果你的控制下有外域,有办法用直接的javascript来做,但前者更容易。

0

设置您的AJAX请求来命中加载内容(即curl)的PHP脚本并将其作为AJAX的xhr响应返回。例如,可以根据目标元素的ID来加载AJAX响应(在您的情况下为部分页面)并将其插入到当前页面中。

看到这个问题,它几乎您的问题: https://stackoverflow.com/questions/3928228/php-and-curl-get-ajax-data

JavaScript库像jQuery需要花费很多的麻烦了AJAX的:http://api.jquery.com/load

如果你还是有问题,调试带有Firebug的ajax让事情变得更容易,因为您可以看到请求发生了什么。

(如果你没有服务器端脚本,而不能编辑你的Apache配置,你有点失控运气,寿。)