接下来是这些代码块:
xmlObj.onreadystatechange = function(){
if(xmlObj.readyState == 4){
updateObj('xmlObj', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
}
}每次XMLHttpRequest的状态发生变化,事件“onreadystatechange”就会被触发。通过使用“xmlObj.onreadystatechange = function(){...}”我们能够创建一个函数并让它在这个XMLHttpRequest对象的状态每次发生改变的时候立刻运行。这里总共有五个状态,由0走到4。
0 – 尚未初始化(在这个XMLHttpRequest开始前)
1 – 加载(XMLHttpRequest初始化一结束)
2 – 加载结束(XMLHttpRequest一从服务器上获得一个回应)
3 – 交互(当XMLHttpRequest对象和服务器连接中)
4 – 结束(当XMLHttpRequest被告知它已经完成了所有人物并结束运行)
这第五个状态(数字4)就是我们能够确定数据已经可用的标志,所以我们检验这个xmlObj.readyState是否等于“4”来确定数据是否可用,如果是4,我们运行updateObj函数。这个函数带两个参数:一个当前web页面的元素ID(当前web页面中要更新的元素)以及用于填充这个元素的数据。这个函数的运行方式在稍后将更详细地解释。
我们的web页面的p元素有一个id“xmlData”,这就是我们准备更新的段落。我们正在取得的数据来自于XML文件,但它有点复杂。这里是它如何工作的原理。
xmlObj.responseXML属性是一个DOM对象 - 它很象“document”对象,除了它来自远程的XML文件。换句话说,如果你在data.xml中运行脚本,那xmlObj.responseXML就是一个“document”对象。因为我们知道这些,我们能够通过“getElementsByTagName”方法取得任何XML节点。数据包含在一个命名为“<data>”的XML节点中,所以我们的任务很简单:取得第一个(而且只有这一个)数据节点。因而,xmlObject.responseXML.getElementsByTagName("data")[0]返回XML文件中的第一个<data>节点。