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

Javascript - XMLHttpRequest, result are always undefined

本文关键字:未定义 结果 Javascript-XMLHttpRequest      更新时间:2023-09-26

我正在尝试测试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"给我"[对象元素]"

我的错误在哪里?

附言:我只对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>

所以,也许我的问题就在我试图找到<group>标签的路上?

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,这意味着请求已被完全服务。

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吗?