你会注意到我们和上次一样以同样的方式(通过一个超链接)调用了这个函数,而且我们将数据放入一个DIV(这次这个东东叫做“dataArea”)。这个ajaxRead()函数和上次很接近,除了一点不同:onreadystatechange函数。让我们先看一下这个函数:
xmlObj.onreadystatechange = function(){
if(xmlObj.readyState == 4){
processXML(xmlObj.responseXML);
}
}
我们取消了updateObj函数并用一个叫做processXML()的新函数来代替它。这个函数将得到XML文档本身(也就是被ajaxRead函数取回的)并处理它。(这“XML文档本身”我指的是参数“xmlObj.responseXML”)
现在让我们分析一下这个函数processXML。下面是它的代码:
function processXML(obj){
var dataArray = obj.getElementsByTagName('pet');
var dataArrayLen = dataArray.length;
var insertData = '<table style="width:150px; border: solid 1px #000"><tr><th>'
+ 'Pets</th></tr>';
for (var i=0; i<dataArrayLen; i++){
insertData += '<tr><td>' + dataArray[i].firstChild.data + '</td></tr>';
}
insertData += '</table>';
document.getElementById ('dataArea').innerHTML = insertData;
}
首先,我们定义了一些变量。“dataArray”作为所有<pet>节点的数组(不是节点数据,只是节点)。“dataArrayLen”是这个数组的长度,用于我们的循环。“insertData”则是一个表格的开头的HTML。
我们的第二步则是遍历所有的<pet>元素(通过变量“dataArray”)并将数据添加到变量insertData中。这里我们会创建一个表格行,插入一个表格数据节点(td)进去,再将每一个<pet>元素的文本包含进这个表格数据节点,并将这些都添加进变量“insertData”。因此,每循环一次,变量insertData将添加一行包含三个宠物中之一名称的新数据。