关于ajax

function toAgentQuery(){
url = 'getEmpMes.do';
sendRequest(url);

var xmlhttprequest = false;

function sendRequest(url){
//broswer
if(window.XMLHttpRequest){ [size=medium][/size]
xmlhttprequest = new XMLHttpRequest();
}else if(window.ActiveXObject){
try{
xmlhttprequest = new window.ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlhttprequest = new window.ActiveXObject("MSXML2.XMLHTTP");
}
}
if(!xmlhttprequest){
alert("can't create XMLHttpRequest");
}

xmlhttprequest.onreadystatechange = show;
xmlhttprequest.open("GET",url,true);
xmlhttprequest.send(null);

}

function show(){
alert(xmlhttprequest);
alert(xmlhttprequest.readyState);
if(xmlhttprequest.readyState == 4){
alert(1111);
alert(xmlhttprequest.status);
if(xmlhttprequest.status == 200){
alert(2323);
var flag = xmlhttprequest.responseText;
alert(flag);
document.getElementById("pub").innerHTML = flag;
}
}
}

}

这是我的一个ajax 我想问当我把open的最后一个值设置为同步,也就是false时:xmlhttprequest.readyState 值没问题从1一直到4成功,xmlhttprequest.status也是200,但是加载出来的页面是空白的,flag的值也是空的 ,当我将open最后一个值设置为true时也就是异步时,alert(xmlhttprequest);第一次是1然后就变成undefined了 各位大虾,到底是怎么回事啊?

3个回答

从你的代码来看,确实有些让我看不明白,第一个function toAgentQuery()的{没结束就出现第二个function sendRequest(url)了。而最后一行多了个},是不是你一直在用这种嵌套function?

这是因为设置同步的时候,等到服务器返回的时候,responseText是空字符串
这是因为设置异步的时候,并没有服务器返回,你就alert(flag)了,因为这个时候服务器还没有返回,所以responseText 还没有值,就成undefined了

responseText还是不要在同步下获取,ajax同步模式下,你的show函数是正常的回调函数,所以能够执行,但responseText在同步模式下是获取不到服务端写入的数据的。
ajax异步模式下,回调函数虽说能够执行多次,但上例中你的xmlhttprequest却被视为只声明了一次,也就是第二次undefined了,而同步模式下每次都会声明一次,所以你在同步模式下出现1——4是正常的。
简单地说,同步模式页面每次都会刷新,所以前端js代码每次都会重新执行,而异步模式在提交到后端的同时,前端js还在进行无刷新的执行,所以你的xmlhttprequest只在第一次才有效。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问