2010-08-09 51 views
1

位一個JavaScript新手在這裏的 -JavaScript錯誤試圖解僱簡單的XMLHttpRequest時(GET)

我射擊的JavaScript代碼,這個基本的位從我的網站作爲一個測試:

var req = new XMLHttpRequest(); 
req.open('GET', 'http://www.google.co.uk/', false); 
req.send(); 
if (req.status == 200) { 
    alert(req.responseText); 
} 

和我不斷收到以下錯誤:

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://localhost/testEx3/Default.aspx :: SendRequest :: line 402" data: no]

有沒有人知道我在做什麼錯在這裏?

UPDATE:

OK - 所以什麼我actaully試圖做的是一個POST請求,我在我的本地開發機器上發佈的Web服務 - 我居然也得到了同樣的錯誤如上 - 這就是爲什麼爲了簡單,我舉了這個例子。現在看起來「同源策略」已經發揮作用 - 所以現在我已經發布了帶有URI的開始部分的web服務,作爲http://localhost/而不是http://tempuri.org/

現在我得到一個500錯誤。有什麼我在標題中缺少的東西?

var request = new XMLHttpRequest(); 
request.open("POST", "http://localhost/ApplicationServices.asmx?op=AddressSearch", false, "", ""); 
request.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 

request.send(x, y, buffer); 

if (request.status == 200) { 
    alert("Success"); 
} 
else { 
    alert("Failure: " + request.status); 
} 
+0

刪除了不再起作用的同源標籤。 – ajm 2010-08-09 17:39:37

回答

1

除非你在谷歌工作,這是行不通的。您無法通過XMLHttpRequest從其他域中獲取信息。這就是所謂的「相同來源政策」。

編輯 —如果您收到來自本地服務器500錯誤,這意味着你的HTTP請求,它向服務器,並在服務器中的一些代碼失敗。檢查你的服務器日誌。

+0

好吧 - 實際上我真的試圖對本地的Web服務進行POST請求 - 但它仍然會給出相同的錯誤。我只是想我會把谷歌網址只是爲了讓我的問題更容易理解 - 我不知道這個「相同的管理政策」。當然,訪問自己的Web服務不是那麼難。 – Vidar 2010-08-09 14:07:26

+0

確定請參閱我的編輯。 – Pointy 2010-08-09 14:47:14

4

看起來您正在嘗試發送違反same origin policy的請求。

基本上,就AJAX請求而言,您僅限於向發送該請求的頁面發送請求到同一個域。例如:

你正在嘗試做#3以上。

如果您需要發送跨域請求,您可以使用JSONP或類似flensend/flxhr之類的東西。

+0

我有一個sneeky的感覺,這對我來說是巨大的矯枉過正 - 正如我所要做的只是一個簡單的POST請求到我在本地機器上發佈的web服務。有更容易的方法嗎? 順便說一句 - 我仍然得到與POST請求相同的錯誤。 – Vidar 2010-08-09 14:08:31