2010-03-21 71 views
0

我需要使用javascript/jquery獲取url而不是php。如何使用javascript/jquery獲取url?

我讀過,你可以做到這一點,如果你有一個PHP代理,但這意味着它仍然通過PHP。因此它仍然是提取它的服務器的IP地址。

只能用前端獲取url,從而獲取客戶端的ip?

回答

5

對於AJAX請求存在Same origin policy。這可以防止Javascript(例如,本網站)向gmail.com(使用您的cookies)發出請求,閱讀您的電子郵件並將其上傳到StackOverflow服務器。在stackoverflow.com上的Javascript只能向該域上的頁面發出AJAX請求。

正如您所看到的,這對安全至關重要。請求必須由運行在您的Web服務器上的代理完成 - PHP可以使用,但還有其他解決方案。例如,Ajax Cross Domain是一個AJAX庫,與運行在服務器上的Perl腳本進行通信,以模擬其他域的AJAX請求。

也可以通過javascript include(腳本標籤),圖片標籤等在其他域上發出請求,但在這些情況下,您無法讀取頁面內容。

您無法使用iframe執行此操作:腳本無法查看iframe的內部結構,除非它們與腳本位於同一個域中。

因此總之,使用代理。

+0

這意味着我必須使用服務器的IP地址獲取頁面?沒有辦法用客戶端的IP獲取它,然後將結果發送回我的服務器?但谷歌地圖API不允許我們只從JavaScript提出請求,從客戶端的IP獲取結果?那麼爲什麼那個工作呢? – 2010-03-21 02:07:24

+0

使用Google Maps API,您可以從Google的服務器加載Javascript(沒有任何問題 - 您可以運行JavaScript,但您只能看到文件的內容)。平鋪圖片等位於Google的服務器上,但始終允許鏈接到外部圖片。通過使用特殊請求書寫

2

問題是,jQuery會使用AJAX獲取url,並且由於潛在的安全性(根據same-origin policy),AJAX不會運行跨域。

但是,有一些方法可以模擬這種情況,如果您在iframe中加載頁面,則可以通過在iframe上使用innerHTML來檢索數據。 以下是使用jQuery的示例腳本:http://code.google.com/p/jquery-crossframe/

+2

現代瀏覽器將不允許您獲取跨域框架的「innerHTML」。 – 2010-03-21 02:02:26

+0

你是對的,你只能通過片段與iframe進行交流。我仍然覺得這仍然是可能的。 – Wolph 2010-03-21 03:47:45