2010-02-10 141 views
29

試圖從一個站點獲取XML內容時,我收到此錯誤NETWORK_ERROR:XMLHttpRequest的異常101

NETWORK_ERROR: XMLHttpRequest Exception 101

。這裏是我的代碼

var xmlhttp; 
if(window.XMLHttpRequest) 
     { 
      xmlhttp = new XMLHttpRequest(); 
     } 
     if (xmlhttp==null) 
     { 
      alert ("Your browser does not support XMLHTTP!"); 
      return; 
     }   

xmlhttp.onReadyStateChange=function() 
     { 
       if(xmlhttp.readyState==4) 
       { 
       var value =xmlhttp.responseXML; 
       alert(value); 
       } 
     } 
     xmlhttp.open("GET",url,false); 
     xmlhttp.send(); 
     //alert(xmlhttp.responseXML);  
    } 
xmlhttp.open("GET",url,false); 
xmlhttp.send(null); 

有沒有人有解決方案?

+0

這看起來像一個跨域問題 – 2012-07-24 11:01:22

+0

請提什麼瀏覽器和/或平臺,您看到的問題(我得到的例外在Android 2.3.7與WebKit的533.1 – Ribo 2013-06-07 21:15:41

回答

2

當我返回不正確的XML(我在根節點中放入一個屬性)時,會發生類似這樣的事情。如果這有助於任何人。

+3

如何根節點中的屬性不正確xml? – devios1 2012-07-20 23:41:06

23

如果您提供的url位於服務器的外部,並且服務器不允許您發送請求,則說明您有權限問題。您不能使用XMLHttpRequest從另一臺服務器訪問數據,而服務器不會明確允許您這樣做。

更新:認識到這一點現在可以在Google上看到,我試圖找到關於這個錯誤的一些文檔。這非常困難。

This article雖然,有一些背景信息和步驟來解決。具體而言,這裏提到了這個錯誤:

As long as the server is configured to allow requests from your web application's origin, XMLHttpRequest will work. Otherwise, an INVALID_ACCESS_ERR exception is thrown

INVALID_ACCESS_ERR的解釋似乎是我們正在尋找在這裏。

要解決這個問題,接收請求的服務器必須配置爲允許來源。這在more details at Mozilla中描述。

+0

[此帖子]是無效鏈接。 – 2013-01-25 04:46:47

+1

謝謝!無效鏈接刪除。 – 2013-01-26 01:01:53

+0

位於另一個域/站點上的URL不一定是權限問題。如果目標服務器允許的話,使用XMLHttpRequest製作 – Ribo 2013-06-07 21:07:02

4

即使URL只是隱含遠程服務器,您無法使用XMLHttpRequest從另一臺服務器訪問數據的限制也適用。

所以: URL = 「http://www.myserver.com/webpage.html」

可能會失敗,

但: URL = 「/webpage.html」

成功 - 即使請求正在從www.myserver.com

+0

如果目標服務器允許,則可以使用XMLHttpRequest訪問其他服務器的數據(多年前它不能)。 – Ribo 2013-06-07 21:10:10

0

解決此問題的另一個方法的現代化是跨源的ressource共享。 HTML5提供此功能。如果目標瀏覽器支持這個功能,你可以在你的CORS_request和 中「包裝」你的XMLhttp請求,你可以使用它並且不會有任何問題。

編輯: 另外,我必須補充說,有很多原因可以引起這個問題。 不僅是一個跨域限制,而且在您的Web服務的WEB.CONFIG中只是錯誤的設置。

例IIS(.NET):

爲了能夠從外部來源的HTTP訪問(在我的情況下,編譯PhoneGap的應用與CORS請求),你必須把它添加到你的web.config

<webServices> 
     <protocols> 
      <add name="HttpGet"/> 
      <add name="HttpPost"/> 
     </protocols> 
    </webServices> 

另一個場景:

我有兩個web服務正在運行......一個在端口80上,另一個在端口90上。這也給了我一個XML HTTP請求錯誤。我甚至不知道爲什麼:)。不過,我認爲這可以幫助許多沒有經驗的讀者。

2

請求中止,因爲它被緩存或以前請求?看來XMLHttpRequest異常101 錯誤可能由於幾個原因引發。我發現,當我多次使用相同的URL發送XMLHttpRequest時就會發生這種情況。 (通過在URL末尾附加緩存無意義字符串的緩存來更改URL,可以重複請求 - 我不打算重複請求,但是程序中的事件導致它發生並導致此異常)。

在重複請求的情況下不返回正確的responseText或responseXML是一個錯誤(可能是webKit)。

當發生此異常時,我確實獲得了readyState == 4和請求對象狀態= 0和responseText ==「」和responseXML == null的onload事件。這是一個跨域請求,服務器允許。

這是它使用的WebKit/533.1

任何人有什麼異常的解釋是:文檔的安卓2.3.5系統上?

1
xmlhttp.open("GET",url, true); 

設置異步部分爲真