var xmlHttp; var stateString; function createXMLHttpRequest(){ if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); } } function sendServer() { createXMLHttpRequest(); var url="/SSH/login.do"; xmlHttp.open("post",url,true); xmlHttp.onreadystatechange = callback; xmlHttp.send(null); } function callback(){ if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { stateString = xmlHttp.responseTEXT;//服务器返回值,假设返回值为1 alert(stateString );//弹出消息框值为1 } } } function click() { sendServer(); alert(stateString);//弹出消息框值为undefined,这为什么得不到值?不明白 }
[code="js"]xmlHttp.open("post",url,true); [/code]
最后一个参数为数据是否为异步发送.
若为true,则是异步发送.执行完send()之后,不管数据有没有返回,都执行后面的语句.也就是说收发数据与执行其它javascript语句是同时进行的.而是否接收到数据,则是在readystatechange事件中进行处理.
若为false,则是同步发送,执行完send()之后,就会停在send()语句中,直到接收到了响应之后,才会继续执行后面的语句.
所以在第三个值为true,直接执行后面的语句时.send之后数据还未接收到,所以会为undefined.
可以写如下代码测试:[code="js"]
sendServer();
setTimeout(function(){
alert(stateString);
},5000);//延迟五秒之后再alert(),这时就是有数据的;[/code]
我的理解为:sendServer(),是一个AJAX异步在执行的方法,如果有反回值他会回调callback,所以在callback中有值,但是在CLICK中他不会等sendServer()是否执行完,所以CLICK中没有打印结果(他不会等).
首先申明,对AJAX不是太熟.