2012-07-06 189 views
0

下面包含的是我嘗試用來顯示另一頁的HTML內容的代碼。我無法讓代碼正常工作,並且每次都收到錯誤。我在這裏錯過了什麼?

$.ajax({ 
    url: 'http://www.msn.com', 
    type: 'GET', 
    dataType : "text/html", 
    success: function (result) { 
     alert('success'); 
     alert(result); 
    }, 
    error: function() { 
     alert('error'); 
} 
}); 
+5

您是否正在嘗試執行CROSS DOMAIN請求? – Shyju 2012-07-06 17:30:29

+0

@Shyju:嗨,這個請求是的,但最終我想打內部「http:// myserver/getstuff?id = 2」休息服務來獲得XML。不過,我只是在這裏測試基礎知識,因爲對msn.com的這個簡單調用不會返回成功(就像我對上面指定的其他服務的調用一樣)。但我對ajax很新,所以不確定是否跨域? – Mariah 2012-07-06 17:32:40

+0

好吧,幾乎肯定'www.msn.com'不是你的域名。 – 2012-07-06 17:37:05

回答

3

你不能做一個跨域AJAX請求(除非服務器是專門爲它設置的)。

您可以做的最好的方式是在您的服務器上調用PHP腳本,該腳本又從其他服務器獲取HTML並將其發送回您的頁面。

2

您只能對自己的域名發出ajax請求。指向你自己的頁面,你的成功函數將被調用。

1

在Chrome中,打開Web Inspector(例如,右鍵單擊,檢查元素),然後轉到控制檯選項卡,然後運行該代碼。然後您將實際看到您觸發的跨域腳本安全錯誤。

3

由於瀏覽器安全限制,大多數「Ajax」請求受same origin policy;該請求無法成功從不同的域,子域或協議中檢索數據。

腳本和JSONP請求不受相同的源策略限制。

來源:http://api.jquery.com/jQuery.get/

+0

我也在想jsonp,但不能檢索HTML - 不起作用! :) – 2012-07-06 17:44:13

1

如果你真的打算做一個跨域AJAX請求和你正在尋找檢索HTML響應你可能想看看this article by James Podolosky,他在那裏討論通過這些管道排序請求YQL,並提供了一個插件來通過覆蓋jQuery.ajax函數來自動執行此操作,從而可以按照您的預期在此處使用它。

+0

從你最近的評論中,你已經建議你只是測試,你不打算做跨域請求,在這種情況下,這個插件對你沒有用處,我建議你做測試一個本地文件。 – Steve 2012-07-06 17:38:11

1

如果您使用的是外部API,您可以使用YQL(但它不完美)。

檢查此fiddle,你會看到它的工作。也許這不適合你,只是把它扔到那裏。

+0

酷,thx! ..... – Mariah 2012-07-06 21:00:52