ajax能够返回正确的xml,却无误读取
javascript中的callback回调函数: function callback()
{
if(req.readyState == 4)
{
if(req.status == 200)
{
parseMessage();
}else{
alert( "Not able to retrieve description "+req.statusText);
}
}
}
下面这段代码便是它调用的代码:(用于做联动的三级菜单,下为由第一级显示第二级时的填充选择框 <select> 的完整代码)
function parseMessage()
{
alert(req.responseXML.xml); //测试用
var xmlDoc=req.responseXML.documentElement;
var xSel=xmlDoc.getElementsByTagName( 'select ');
var select_root=document.getElementById( 'second ');
select_root.options.length=0;
for(var i=0;i <xSel.length;i++)
{
var xValue=xSel[i].childNodes[0].firstChild.nodeValue;
var xText=xSel[i].childNodes[1].firstChild.nodeValue;
alert(xText);
var option=new Option(xText,xValue);
try{
select_root.add(option);
}catch(e){
}
}
}
用了alert方法能够得到了整个正确无误的xml(没有中文问题,格式也良好,用xmlspy测试过),可第二句var xmlDoc=req.responseXML.documentElement;就不行了,IE下方提示错误信息为: 'null '为空或不是对象!
下面是body中的代码,只是测试用,所以sql什么的都写在JSP页面中:
<body>
<select name= "top " onchange= "changeTop() ">
<option value= "0 "> choice </option>
<% String sql= "select * from goodstype where ParentNo=0 order by id ";
Connection conn=DBFactory.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs= stmt.executeQuery(sql);
while(rs.next()){
%>
<option value= " <%=rs.getString( "typeno ")%> "> <%=rs.getString( "name ")%> </option>
<%}%>
</select>
<select name= "second " onchange= "changeSecond() ">
</select>
<select name= "third " onchange= "changThird() " >
</select>
</body>
[解决办法]
贴一个示例的响应xml字符串出来看下
[解决办法]
应该是var xmlDoc = req.responseXML;就可以了,不是你那样写的
[解决办法]
var xmlDoc=req.responseXML.documentElement;
改成 var xmlDoc = req.responseXML;
然后通过xmlDoc取里面的element
var xSel=xmlDoc.getElementsByTagName( 'select ');
[解决办法]
var xmlDoc=req.responseXML.documentElement;
去掉documentElement就可以 给你个例子看看
[解决办法]
req.onreadystatechange=function(){
if (req.readyState==4) {
alert(req.readyState) //add this
if (req.status==200) {
alert(req.status) //add this
callbackfun(req.responseText);
}
}
}
根据返回的值看看什么原因
[解决办法]
var xmlDoc=req.responseXML.documentElement;
改成 var xmlDoc = req.responseXML;
然后通过xmlDoc取里面的element
var xSel=xmlDoc.getElementsByTagName( 'select ');
按楼主那程序下去,vxSel.length应该为0,还是不能得到需要的数据
[解决办法]
在服务器端(如servlet或action)加上response.setContentType( "text/xml; charset=GBK ");