利用getElementsByTagName解析 responseXML 返回的值
2008-11-11 11:50
555 查看
以下程序在IE6和Firefox/3.1b1 下测试通过
在Ajax返回的responseXML中,需要对其进行解析,而IE6和Firefox是有点小区别的
以下附上完整代码再解释。
XML文件:
<?xml version="1.0"?>
<options>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</options>
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>无标题 1</title>
<script type="text/javascript">
var options = false;
//创建XMLHttpRequest对象
function CreateRequest()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();
else if (window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
else
return false;
}
function GetDataFromXML(filename)
{
var request = CreateRequest();
if (!request)
return;
var result = document.getElementById("result");
var txts = document.getElementById("txts");
request.open("GET", filename);
request.onreadystatechange = function()
{
if (request.readyState==4)
{
//由于是本地测试,有时会出现 request.status=0 的情况
if (request.status==200)
{
var xmlDoc;
//IE6
if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(request.responseXML);//不可以是 responseText
}
//Firefox
else
{
xmlDoc = request.responseXML;
}
options = xmlDoc.getElementsByTagName("option");
txts.value = options.length;
ListOptions();
}
}
}
request.send(null);
}
//为select添加选项
function ListOptions()
{
var select = document.getElementById("select");
for (var i=0; i<options.length; i++)
{
select.options[i+1] = new Option(options[i].firstChild.data, options[i].firstChild.data);
}
}
function SelectChange()
{
var txts = document.getElementById("show");
var select = document.getElementById("select");
txts.style.color = select.value;
}
</script>
</head>
<body>
<div>
<input type="button" id="btn" onclick="GetDataFromXML('test.xml');" value="Submit" />
</div>
<div id="result">
<select id="select" onchange="SelectChange();">
<option>==请选择颜色==</option>
</select>
</div>
<div>
<textarea cols="10" rows="10" id="txts" style="width:500px; height:300px;" ></textarea>
</div>
<div id="show">
this is show...
</div>
</body>
</html>
区别体现在HTML代码中40-51行,IE6中是要创建对象 ActiveXObject("Microsoft.XMLDOM") 对responseXML对象进行加载后方可用getElementsByTagName进行解析的。
不知道这点区别而一直在IE6下测试会一头雾水,没报错但也没结果。
为了简单,本程序在创建XMLHttpRequest对象时只考虑了IE6及以上版本和FF,而如果要考虑老版本的IE,则需要更复杂的创建过程。
在Ajax返回的responseXML中,需要对其进行解析,而IE6和Firefox是有点小区别的
以下附上完整代码再解释。
XML文件:
<?xml version="1.0"?>
<options>
<option>Red</option>
<option>Green</option>
<option>Blue</option>
</options>
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>无标题 1</title>
<script type="text/javascript">
var options = false;
//创建XMLHttpRequest对象
function CreateRequest()
{
if (window.XMLHttpRequest)
return new XMLHttpRequest();
else if (window.ActiveXObject)
return new ActiveXObject("Microsoft.XMLHTTP");
else
return false;
}
function GetDataFromXML(filename)
{
var request = CreateRequest();
if (!request)
return;
var result = document.getElementById("result");
var txts = document.getElementById("txts");
request.open("GET", filename);
request.onreadystatechange = function()
{
if (request.readyState==4)
{
//由于是本地测试,有时会出现 request.status=0 的情况
if (request.status==200)
{
var xmlDoc;
//IE6
if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load(request.responseXML);//不可以是 responseText
}
//Firefox
else
{
xmlDoc = request.responseXML;
}
options = xmlDoc.getElementsByTagName("option");
txts.value = options.length;
ListOptions();
}
}
}
request.send(null);
}
//为select添加选项
function ListOptions()
{
var select = document.getElementById("select");
for (var i=0; i<options.length; i++)
{
select.options[i+1] = new Option(options[i].firstChild.data, options[i].firstChild.data);
}
}
function SelectChange()
{
var txts = document.getElementById("show");
var select = document.getElementById("select");
txts.style.color = select.value;
}
</script>
</head>
<body>
<div>
<input type="button" id="btn" onclick="GetDataFromXML('test.xml');" value="Submit" />
</div>
<div id="result">
<select id="select" onchange="SelectChange();">
<option>==请选择颜色==</option>
</select>
</div>
<div>
<textarea cols="10" rows="10" id="txts" style="width:500px; height:300px;" ></textarea>
</div>
<div id="show">
this is show...
</div>
</body>
</html>
区别体现在HTML代码中40-51行,IE6中是要创建对象 ActiveXObject("Microsoft.XMLDOM") 对responseXML对象进行加载后方可用getElementsByTagName进行解析的。
不知道这点区别而一直在IE6下测试会一头雾水,没报错但也没结果。
为了简单,本程序在创建XMLHttpRequest对象时只考虑了IE6及以上版本和FF,而如果要考虑老版本的IE,则需要更复杂的创建过程。
相关文章推荐
- 利用getElementsByTagName解析 responseXML 返回的值
- 利用getElementsByTagName解析 responseXML 返回的值 (ie6特殊处理)
- 利用getElementsByTagName解析 responseXML 返回的值 (ie6特殊处理)
- myXmlHttpRequest.responseXML.getElementsByTagName()返回null
- 【已解决】Android中用DOM方式解析xml时使用getElementsByTagName去获得节点结果为空
- responseXML.getElementsByTagName() (转贴)
- alert(xmlHttp.responseXML.getElementsByTagName('row').length);一直为0的原因
- XMLHttpReq.responseXML.getElementsByTagName() .length返回值0
- XML DOM getElementsByTagName+childNodes获取XML数据对象的使用
- js小练习:利用getElementsByTagName方法、for循环、this指针、数组实现对多个相同元素value值的改变
- 使用HttpClient 发送get、post请求,及其解析xml返回数据
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- getElementsByTagName() 方法可返回带有指定标签名的对象的集合。
- document.getElementsByTagName()方法的返回值
- getElementByID getElementsByName getElementsByTagName的区别 和 对xml操作
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- 用document.getElementsByTagName()返回的真的是数组吗?
- Dom4j递归解析XML实现JS的getElementsByName类似方法
- 利用pull解析器解析服务器返回的String类型的XML