2011-06-13 195 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配置,你有點失控運氣,壽。)