Javascript 解析CGI的XML输出时出现问题
我已经从我们的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
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
不存在
如果Iconsole.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');