未捕获TypeError:无法读取属性'getElementsByTagName'

时间:2017-11-13 16:47:55

标签: javascript xml

我正在处理一个页面,该页面从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)

0 个答案:

没有答案