首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

ajax能够回到正确的xml,却无误读取

2011-11-06 
ajax能够返回正确的xml,却无误读取javascript中的callback回调函数:functioncallback(){if(req.readyState

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 ");

热点排行