2010-12-08 108 views
0

我試圖在我的博客系統中寫一個實用程序作爲帖子。限制是我無法運行任何服務器端代碼。我只能運行客戶端(JavaScript)代碼。我想向外部域發送請求並解析結果。如何使用客戶端JavaScript從外部服務器獲取Ajax請求

例如,基於人們如何使用我的工具,我會希望能夠得到一個頁面,如http://example.com/getPage.html?page=A的HTML,其中可能包含:

<html> 
... 
<body> 
... 
    <table id="targetTable"> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    </table> 

...我將存儲在一個JavaScript字符串中,然後查詢以找到我想要的數據。

我想使用客戶端代碼僅從外部域(即我的腳本未在http://example.com上運行,我也不隸屬於http://example.com)查詢此頁面。

我正在使用jQuery和it says,因爲same origin policyjQuery.get()方法不會工作。有什麼辦法做我想要的其他方式?例如,加載一個iframe然後以某種方式讀取其html屬性?

回答

0

恐怕這是不可能的。你可以使用一個名爲jsonp的約定來解決它,但是它只能檢索json對象(即使那些對象當然可以包含h​​tml字符串)。但是一個服務器只能響應一個jsonp請求,如果它有內置的支持。

對於您的問題最直接的解決方法是創建一個小的服務器,獲取html頁面並返回json數據。然後你可以把你的ajax調用發送到該服務器(如:http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA),讓它從example.com獲取數據並將其作爲json返回給客戶端腳本。

只是爲了加強我的論點,一塊從jQuery的AJAX頁面引用:

由於瀏覽器的安全限制, 大多數「Ajax」的請求受到 同源策略;請求 無法成功檢索來自不同域,子域或 協議的數據 。

腳本和JSONP請求 不受同一來源 政策的限制。

1

你可能想看看JSONP和更近的CORS。使用這些技術仍然不能保證你能夠只使用Javascript和服務器端代碼來做你想做的事情......

0

您可以從另一個域加載iframe或調用POST調用另一個域。

幸運的是我們的安全性,但不幸的是您的問題,由於相同的原產地政策,你不能閱讀任何Javascript。

如果您無法從其他域獲得任何合作。例如:啓用JSONP或window.postMessage,那麼您唯一的解決方案是使用Web服務器作爲代理。
提供您的頁面或免費(如果您的流量不是很大)的服務器,例如Google App Engine,您可以在其中進行操作。

您可以使用通用服務在ajax,JSONP或iframe + window.postMessage中調用此服務器,該服務將獲取頁面內容並將其傳遞給瀏覽器。

相關問題