我正在处理一个页面,该页面从XML文件riglists.xml
获取数据,然后写入表的<tbody>
。使用XMLHttpRequest()
从XML文件中获取数据。由于控制台日志建议它正确地获取数据,但是当通过另一个函数参数时,它会初始化undefined。
功能如下:
function loadXmlGlobal(){
var xmlDoc="riglists.xml";
var xhr= new XMLHttpRequest();
xhr.open("GET",xmlDoc,true);
xhr.send();
xhr.onreadystatechange = function () {
if(xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
return xhr.responseTest;
}
};
}
function readXML() {
var xmlDoc = loadXmlGlobal();
console.log(xmlDoc);
var memberArray = xmlDoc.getElementsByTagName("MEMBER"); .....
现在console.log(xhr.responseText);
在控制台中打印了riglists.xml的全部内容,但console.log(xmlDoc);
打印未定义并显示此错误:
Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined
at readXML ((index):87)
当我使用xhr.responseXML
代替xhr.responseText
时,它什么也没有返回。为什么?
riglists.xml
的内容如下:
<LIST>
<MEMBER>
<USERDATA>Access Tocken</USERDATA>
<PLATFORM>PC</PLATFORM>
<PROCESSOR>AMD</PROCESSOR>
<RAM>8 GB</RAM>
<HDD>1 TB</HDD>
<SDD>256 GB</SSD>
<GFX>NVIDIA</GFX>
<LIKES>0</LIKES>
</MEMBER>
</LIST>
我正在使用 XAMPP版本:5.6.32 和 Google Chrome 62.0.3202.62
希望我能够涵盖所有需要的东西,我知道它可能是愚蠢的东西,但我不能指出它。
更新:仍然没有运气。通过解决方案页面(链接:How to return the response from an asynchronous call?)@epascarello建议完成所有内容。
function loadXmlGlobal(callback){
var xmlDoc="riglists.xml";
var xhr= new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) { // request is done
if (xhr.status === 200) {
callback(xhr.responseText);
}
}
};
xhr.open("GET",xmlDoc);
xhr.send();
}
function readXML() {
loadXmlGlobal(function (result) {
var memberArray = result.getElementsByTagName("MEMBER");
console.log(memberArray[0].getElementsByTagName("USERDATA")[0].childNodes[0].nodeValue);
});
但现在得到:
Uncaught TypeError: result.getElementsByTagName is not a function
at (index):95
at XMLHttpRequest.xhr.onreadystatechange ((index):85)