Javascript - XMLHttpRequest,结果总是未定义的

时间:2012-02-05 18:32:53

标签: javascript xml xmlhttprequest

我正在尝试测试xml文件是否包含标记“<group>

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml", false);
xmlhttp.send(null);
xml = xmlhttp.responseXML.documentElement; 

var thegroup = xml.getElementsByTagName('group')[0];
if (!group) {
    alert('No <group> in the XML: ' + xml);
    return;
} else {
    alert(xml + 'have a <group> tag');
}

即使我的xml文件标记为“<group>”,结果也总是否定的,变量“thegroup”未定义。

xml”给我“[对象元素]”

我的错误在哪里?

PS:我只对webkit感兴趣,我现在不关心IE,Opera或Firefox。

编辑:这是我的实际代码

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=UTF-8">
<title>xmltest</title>
<script type="text/javascript">

function init() {

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml");
xmlhttp.send(null);
xmlhttp.onreadystatechange = callbackFunction;

function callbackFunction(){
  if (xmlhttp.readyState == 4){
     xml = xmlhttp.responseXML.documentElement; 
    var group = xml.getElementsByTagName('group')[0];
    console.debug(xml)
    if (!group) {
      alert('No <group> in the XML: ' + xml);
      return;
    } else {
      alert(xml + 'have a <group> tag');
    }
  }
}

};

</script>
</head>
<body onLoad="init();">

</body>
</html>

和我的xmlfile.xml:

<?xml version="1.0" ?>

<group type="vertical">
<name>name</name>
<title>title</title>
</group>

此时触发警报说: XML中没有<group>:[object Element]

所以也许我的问题就在于我试图找到<group>标签的方式?

2 个答案:

答案 0 :(得分:7)

XMLHttpRequest是异步的,它不会那样工作。当您使用xmlhttp.send(null);时,您必须定义将在服务器响应数据时执行的回调函数,否则您将尝试访问空数据。 代码看起来像这样:

var xmlhttp = new window.XMLHttpRequest();
xmlhttp.open("GET", "xmlfile.xml");
xmlhttp.send(null);
xmlhttp.onreadystatechange = callbackFunction;



function callbackFunction(){
  if (xmlhttp.readyState == 4){
     xml = xmlhttp.responseXML.documentElement; 
    var thegroup = xml.getElementsByTagName('group')[0];
    if (!group) {
      alert('No <group> in the XML: ' + xml);
      return;
    } else {
      alert(xml + 'have a <group> tag');
    }
  }
}

这样,每次服务器发回响应时,您都使用onReadyStateChange告诉浏览器运行callbackFunction。它测试readyState为4,这意味着请求已完全服务。

答案 1 :(得分:1)

var thegroup = xml.getElementsByTagName('group')[0];
if (!group) {
    alert('No <group> in the XML: ' + xml);
    return;
} else {
    alert(xml + 'have a <group> tag');
}

什么是group?您的意思是thegroup吗?