2012-01-05 73 views
1

感謝您的閱讀。我試圖想出一個Javascript函數,它將外部URL中的頁面的HTML源代碼轉換爲變量,以便整個事情變得可編輯。複雜的是,URL不以「html,htm,aspx」擴展名結尾,而是以一串輸入表單變量(即?type = AAA & color = BBB ...)結尾。因此XMLHttpRequest方法是不可能的。無XMLHttpRequest獲取URL的HTML

這是可以在JS/jQuery的所有?我聽說過的同源策略,但下面的工具管理來做到這一點,雖然在PHP中:http://www.iwebtool.com/code_viewer

+4

你從哪裏得到的是什麼網址 「結尾」 有什麼關係是否可以通過加載的想法XmlHttpRequest的? – 2012-01-05 02:03:23

回答

0

XMLHttpRequest的任何有效的URL的作品,只要給它相應的URL,你可以得到的響應文本。

但是,有same-origin policy的限制。對於不同的情況,這有不同的解決方法,但是如果你想能夠操縱你收到的文本,那麼實際上只有一個選項。使用相同的JavaScript,你目前有,只是將其添加爲的getURL的第一行:

url='/path/to/proxy.php?url='+encodeURIComponent(url); 

然後,你的服務器(這是服務於網頁和它的JavaScript的相同)上,寫proxy.php:

<?php 
    echo file_get_contents($_GET['url']); 
?> 

這將使您的每個ajax請求轉到您的服務器,該服務器不具有僅從一個域加載的限制。服務器將加載你詢問的網址,並用它從加載的頁面得到的響應回覆你。請注意,上面的腳本只會給你內容正文(當你查看源代碼時看到的內容) - 如果你需要訪問HTTP頭部,你也可以轉發這些頭文件,它將會變得更加複雜。

+0

嗨。我試過這個,但無濟於事。以下是此方法的代碼。它只適用於本地網頁。 – user1131175 2012-01-08 03:42:43

+0

var http; if (window.XMLHttpRequest) { http = new XMLHttpRequest(); } else { try { http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { http = false; } } } function getUrl(url) { http.open("GET",url,false); http.send(); return http.responseText; } user1131175 2012-01-08 04:16:10

+0

在這種情況下,問題不在於url的形式,而是因爲您嘗試從另一個域名加載url。爲了使JavaScript更安全,瀏覽器不會讓腳本加載url,除非它來自同一個域。對於不同的情況有不同的解決方法,但聽起來你想使用服務器端代理。我已經編輯瞭如何在我的答案中做到這一點。 – 2012-01-08 12:03:37

0

在這種情況下,同樣的來源策略也適用,但是您可以使用服務器端代碼(PHP)和jQuery的組合來實現。這裏有一個小例子。

PHP

<?php 
    $url = $_REQUEST['url']; 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle,CURLOPT_URL,$url); 
    curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); 
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); 
    $buffer = curl_exec($curl_handle); 
    curl_close($curl_handle); 
    echo($buffer); 
?> 

的jQuery/HTML

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$.ajax({ 
    type: "POST", 
    url: "yourPhpScript.php", 
    data: "url=http://stackoverflow.com" 
}).done(function(content) { 
    $('#content').html(content); 
    //content is your variable containing the source 
}); 
</script> 

<div id="content"></div> 
+0

謝謝你,斯蒂芬,對於延遲迴復感到抱歉。您的方法完美地使用短url,但在嘗試訪問URL以輸入變量結尾的頁面的HTML時遇到同樣的問題。例如,嘗試http://www.remax-oa.com/real-estate-listings/#mode=1&sl=toronto&mnp=6&mxp=110&pt=20&soh=false&dv=false&do=0,並輸出「錯誤的請求(無效的網址)」。如果你有一個想法,請告知。 – user1131175 2012-01-08 04:28:29

+0

我從來沒有使用捲曲,雖然我已經看到它建議大量的時間。你知道在這裏使用curl是否有什麼具體優勢,而不是簡單的'file_get_contents'? – 2012-01-08 12:10:24

+0

增加了安全性,更多選項。 – Stefan 2012-01-08 16:09:17