这个 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>
<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>
req = getXMLHttpRequest();
req.open("POST", url, true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
req.onreadystatechange=function() {
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() {}
}
刚学ajax 实在不知为什么“POST方法必须setRequestHeader ”,为什么在我本地没有设置也能跑通~~ 不解
还有那个req没赋值 真不知道是如何回事,我本地能有值,奇怪了 望能人解答