2010-01-13 55 views
10

爲什麼下面的代碼Based on Mozilla example不起作用?試用Firefox 3.5.7 & Chrome。XMLHttpRequest從遠程主機獲取HTTP響應

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
</head> 
<body> 
</body> 
    <script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script> 
</html> 

請瀏覽器正在從拉動本地磁盤的HTML(文件:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

在Firefox它提供了以下錯誤:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no] 

我在做什麼錯?我想向遠程主機提交請求並提醒結果(稍後添加到div中)。

回答

11

您的瀏覽器阻止cross-site scripting。您必須使用相對路徑,否則大多數瀏覽器將僅返回錯誤或空的responseText。

下面的堆棧溢出後很可能也涉及到你的問題:

+0

OK,它是如何與谷歌分析整合JavaScript代碼的工作? – 2010-01-15 15:14:52

+1

@Maxim:你可能想看看這個帖子:**谷歌分析如何收集其數據?**:http://stackoverflow.com/questions/892049/how-does-google-analytics-collect-its -數據 – 2010-01-15 15:20:56

0

安全問題否?

推測firefox阻止本地文件與遠程主機通話?

偵察圓網 - 發現這一點。嘗試添加到您的腳本開始:

try { 
    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
} catch (e) { 
    alert("Permission UniversalBrowserRead denied."); 
} 

不能保證這會工作;因爲最終你想要做的是輸入一個安全漏洞,瀏覽器已經被特別編碼以便插入(跨域請求)。

雖然通常由用戶自行決定,但有些特殊情況下可以開啓。

3

我還假設您已經在瀏覽器中直接打開了您的HTML測試頁,通過您對file:///...的參考來判斷。對於XMLHttpRequest調用,您需要從服務器提供HTML。嘗試像xampp(http://www.apachefriends.org/en/xampp.html)以啓動並運行本地服務器,然後從http://localhost/XMLHTTP.html運行測試。

注意,這並不解決您的相同來源的問題,但這樣會使下面的代碼工作:

<script> 
    var req = new XMLHttpRequest(); 
    req.open('GET', '/myTestResponse.html', false); 
    req.send(); 
    if(req.status == 200) { 
     alert(req.responseText); 
    } 
    </script> 
相關問題