2012-02-28 50 views
1

*解決*答案是獨立的後下方使用Javascript - 的XMLHttpRequest在Internet Explorer中失敗

此代碼運行罰款的Firefox,但它不會在Internet上運行Explorer 8中它給我的「拒絕訪問錯誤出了什麼事,我失蹤?

function loadXMLDoc(dname){ 
    if (window.XMLHttpRequest){ 
     var xhttp=new XMLHttpRequest(); 
    } 
    else{ 
     var xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xhttp.open("GET", dname,false); 
    xhttp.send(); 
    return xhttp.responseXML; 
} 
var xmlDoc=loadXMLDoc("notSchema.xml"); 
var x=xmlDoc.getElementsByTagName('ROOT_NODE_ID'); 

它特別不喜歡。開()和。發送()

編輯...

var x; 

function loadXMLDoc(dname){ 
var request = $.ajax({ 
    url: dname, 
    type: "GET", 
    async: false, 
    data: {}, 
    success: function(http){ 
     xmlDoc = http; 
     alert(http); 
     x=http.getElementsByTagName("ROOT_NODE_ID"); 
    }, 
    error: function(html){ 
     alert('failure: ' + html); 
    }  
}); 

} 

loadXMLDoc("notSchema.xml"); 

for (var i=0;i<x.length;i++) 
{ 

if(x[i].childNodes[0] == undefined) { 
    treeArray[count]="null"; 
    count++; 
}else{ 
    //return ROOT_NODE_ID 

    treeArray[count]=x[i].childNodes[0].nodeValue; 
    count++; 
} 
} 

再次編輯該規範。我想要做的是加載XML,解析標籤「ROOT_NODE_ID」,然後獲取該值並將其存儲到數組中

當我在firefox中運行該代碼時,它返回51,這是數字的ROOT_NODE_ID標記並填充我正在製作的樹。 當我在IE8中運行相同的確切代碼時,它甚至不提醒。

我很沮喪。

+0

嘗試使用'Msxml2.XMLHTTP'而不是'Microsoft.XMLHTTP'。另外,你在哪裏測試?它是一個本地文件嗎? – Ryan 2012-02-28 15:47:00

+0

這是一個本地文件,IE8似乎在使用XMLHttpRequest而不是「else」語句。 – Zack 2012-02-28 15:48:34

+2

爲什麼不使用jQuery爲你抽象所有這些? – 2012-02-28 15:48:43

回答

1

我想通了。就像我之前說的,如果你在Firefox中運行上面的代碼,它會返回'object',如果你在IE8中運行它,它會返回對象的內容。我通過在IE8中再次加載對象的內容來解決此問題,從而將對象的內容重新轉換爲可以解析的對象。如果那有意義的話。

只是爲了澄清剛剛訪問此主題的人。當我打電話給'alert(http)'時'在Firefox中,它會返回'[object XMLDocument]',但在IE8中它將返回'[object XMLDocument]'的實際內容。

var treeArray=new Array(); 
var count = 0; 
var x; 

function loadXMLDoc(dname){ 
var request = $.ajax({ 
    url: dname, 
    type: "GET", 
    async: false, 
    data: {}, 
    success: function(http){ 
     var xmlDocument = new ActiveXObject("Microsoft.XMLDOM"); 
     //Loading the contents of the object 'http' a second time, which turns it into an object again. 
     xmlDocument.loadXML(http); 
     x = xmlDocument.getElementsByTagName("ROOT_NODE_ID"); 
     alert(x.length); 
    }, 
    error: function(html){ 
     alert('failure: ' + html); 
    }  
}); 

} 

loadXMLDoc("notSchema.xml"); 

for (var i=0;i<x.length;i++) 
{ 

if(x[i].childNodes[0] == undefined) { 
    treeArray[count]="null"; 
    count++; 
}else{ 
    //return ROOT_NODE_ID 

    treeArray[count]=x[i].childNodes[0].nodeValue; 
    count++; 
} 
} 
0

扎克,

您可以使用jQuery做Ajax調用 - jQuery將妥善做好一切窗簾後面。

你的情況在這裏:

function loadXMLDoc(dname){ 
var request = $.ajax({ 
    url: dname, 
    type: "GET", 
    async: false, 
    data: {}, 
    success: function(html){ 

      var x=xmlDoc.getElementsByTagName('ROOT_NODE_ID');  

    }, 
    error: function(html){ 
     alert('failure: ' + html); 
    } 
}); 

}

+0

它正確地拉XML,但我怎麼會那麼執行 變種X = xmlDoc.getElementsByTagName(「ROOT_NODE_ID」) 即解析效應初探 – Zack 2012-02-28 17:48:53

+0

它是成功的功能:看編輯的代碼 – oneiros 2012-02-28 18:07:58

+0

好吧,那麼我所有的解析代碼將進入成功功能。更正? var x = html.getElementsByTagName('ROOT_NODE_ID'); – Zack 2012-02-28 18:17:46

相關問題