Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解析CGI的XML输出时出现问题_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

Javascript 解析CGI的XML输出时出现问题

Javascript 解析CGI的XML输出时出现问题,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我已经从我们的CGI请求了XML格式的数据。我异步执行此操作,并具有如下回调函数: var serverData; function serverDataCallback(event) { if (event.target.readyState === 4) { if(event.target.status === 200) { var serverData = event.target.responseXML; } } 如果我conso

我已经从我们的CGI请求了XML格式的数据。我异步执行此操作,并具有如下回调函数:

var serverData;
function serverDataCallback(event) {
    if (event.target.readyState === 4) {
        if(event.target.status === 200) {
            var serverData = event.target.responseXML;
    }
}
如果我
console.log
事件,我会得到一个
XMLHttpRequestProgressEvent

target.responseXML
正是我想要的,它在Chrome调试控制台中的类型是
Document

<Params>
    <VCA>
        <Ch0>
            <enable>yes</enable>
        </Ch0>
    </VCA>
</Params>
只有一个例外说明
getElementByTagName
不存在

如果I
console.log
服务器数据报告为
文档

我以前从未做过返回XML的XML HTTP请求,所以我真的不知道我在做什么!有人能解释一下吗?

如果您想使用(就像您在示例中一样),您需要像XML文档一样仔细地遍历元素树。您还需要正确拼写函数;它被称为
getElementsByTagName
,而不是
getElementByTagName
,因为标记名没有唯一性,因此该方法将返回匹配元素的数组。DOM解决方案如下所示:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
  if ((this.readyState == 4) && (this.status == 200)) {
    var paramsElement = this.responseXML.getElementsByTagName('Params')[0];
    var vcaElement = paramsElement.getElementsByTagName('VCA')[0];
    var chElement = vcaElement.getElementsByTagName('Ch0')[0];
    var enableElement = chElement.getElementsByTagName('enable')[0];
    var enable = enableElement.data;

    console.debug(enable);
  }
};

xhr.open('GET', 'test.xml');
xhr.send();
当然这里应该有很多错误检查(每次调用
getElementsByTagName
都可能返回null),但希望它能帮助您开始。但是,我鼓励您不要直接使用DOM或
XmlHttpRequest
,而是使用如下抽象:

如您所见,它的代码要少得多,而且您可以很好地将XML转换为比DOM对象强大得多的jQuery对象。

如果您想使用(就像您在示例中一样),您需要像XML文档一样仔细地沿着元素树走下去。您还需要正确拼写函数;它被称为
getElementsByTagName
,而不是
getElementByTagName
,因为标记名没有唯一性,因此该方法将返回匹配元素的数组。DOM解决方案如下所示:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
  if ((this.readyState == 4) && (this.status == 200)) {
    var paramsElement = this.responseXML.getElementsByTagName('Params')[0];
    var vcaElement = paramsElement.getElementsByTagName('VCA')[0];
    var chElement = vcaElement.getElementsByTagName('Ch0')[0];
    var enableElement = chElement.getElementsByTagName('enable')[0];
    var enable = enableElement.data;

    console.debug(enable);
  }
};

xhr.open('GET', 'test.xml');
xhr.send();
当然这里应该有很多错误检查(每次调用
getElementsByTagName
都可能返回null),但希望它能帮助您开始。但是,我鼓励您不要直接使用DOM或
XmlHttpRequest
,而是使用如下抽象:


正如您所看到的,它的代码要少得多,而且您可以很好地将XML转换为比DOM对象强大得多的jQuery对象。

谢谢,我真是个白痴,因为我把函数拼写错了。我明天去看看工作。我不确定是否要依赖jQuery,因为它需要一个其他人可以使用的javascript名称空间。我不确定我是否可以用它强制依赖jQuery。谢谢,我真是个白痴,因为我把函数拼写错了。我明天去看看工作。我不确定是否要依赖jQuery,因为它需要一个其他人可以使用的javascript名称空间。我不确定是否可以用它强制依赖jQuery。
$.get('test.xml', function(data, textStatus, xhr) {
  var $enable = $(data).find('Params VCA Ch0 enable');
  var enable = $enable.text();
  console.debug(enable);
}, 'xml');