这个  ajax程序是哪错了,   找了 半天没找到错误
<script language="JavaScript" type="text/javascript">
  var req= false;
  function getXMLHttpRequest(){
   if(window.ActiveXObject){
   req = new ActiveXObject("Microsoft.XMLHTTP");
   }else if(window.XMLHttpRequest){
   req = new XMLHttpRequest();
   }
  }
  
  function getkf(){
   
   if(!req) getXMLHttpRequest();
  
   req.onreadystatechange = kfCallBack;
  
   req.open('post','../../temp',true);//跳入一个servlet中
  
   req.send(null);
  
  }
  
  function kfCallBack(){
  
   if(req.readyState==4){
       alert("status==4");
   if(req.status==200){
   alert("status==200");
       var doc = req.responseXML;
   // var doc = xmlHttp.responseText+"";
   alert("doc:"+doc);
   var opts = doc.getElementsByTagName("depot");
  
   alert("depot="+opts);
  
   var sel = document.getElementById("k");
   alert("selByID="+sel);
  
   sel.options.add(new Option("--请选择--","--请选择--"));
   alert("sel.options"+sel);
   alert("opts.length="+opts.length);
    for(var i=0;i<opts.length;i++){
     sel.options.add(new Option(opts[i].text,opts[i].text));
   alert("sel.options.add="+opts[i].text);
    }
   }
   }
  
  }
  
   window.onload = getkf();
</script>
 servlet文件中是这样写的:
                PrintWriter out = response.getWriter();
StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
System.out.println(sb);
sb.append("<XML>\n");
                DBConnect db = new DBConnect(); 
String sql = "select distinct storehous from storehousmaster";
ResultSet rs = db.getRs(sql);
try {
while(rs.next()){
System.out.println(rs.getString("storehous"));
sb.append("<depot>");
sb.append(rs.getString("storehous"));
sb.append("</depot>\n");
}
sb.append("</XML>");
                        System.out.println(sb.toString());
out.write(sb.toString());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.close();上面页面中的js因该没问题:
如果把function getkf()中的req.open改为('post','×××。xml',true)的话,而 。xml文件中写为:
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<depot>A</depot>
<depot>B</depot>
<depot>C</depot>
</XML>
 就能正常了  所以我认为是servlet中有错/req.responseXML的问题  但是我看不出servlet或其他哪有错:  那位高人指点下,
在servlet中的打印出的信息 System.out.println(sb.toString());如下:
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<depot>aa</depot>
<depot>B1</depot>
<depot>C</depot>
<depot>qq</depot>
<depot>ww</depot>
<depot>A</depot>
<depot>B</depot>
</XML>

解决方案 »

  1.   

    加一句response.setContentType("text/xml")试试吧
      

  2.   

    req没赋值 POST方法必须setRequestHeader
    req = getXMLHttpRequest();
    req.open("POST", url, true);
    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    req.onreadystatechange=function() {
      

  3.   

    发现上面方法也没return...你这个怎么写的?
    function getXMLHttpRequest ()
        {
        if(window.ActiveXObject){
          var req = null ;
            try{
              req=new ActiveXObject("Microsoft.XMLHTTP");
            }catch(e){
              req=new ActiveXObject("Msxml2.XMLHTTP");
            }
          return req;
        }else
        return new XMLHttpRequest();
        }function kfCallBack(){
        var req = getXMLHttpRequest();
        req.open("POST", url, true);
        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        req.onreadystatechange=function() {}
    }
      

  4.   


    刚学ajax  实在不知为什么“POST方法必须setRequestHeader ”,为什么在我本地没有设置也能跑通~~  不解
      还有那个req没赋值 真不知道是如何回事,我本地能有值,奇怪了   望能人解答