问题描述
<script type="text/javascript"> 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,这为什么得不到值?不明白 }</script>
解决方案
xmlHttp.open("post",url,true); 最后一个参数为数据是否为异步发送.若为true,则是异步发送.执行完send()之后,不管数据有没有返回,都执行后面的语句.也就是说收发数据与执行其它javascript语句是同时进行的.而是否接收到数据,则是在readystatechange事件中进行处理.若为false,则是同步发送,执行完send()之后,就会停在send()语句中,直到接收到了响应之后,才会继续执行后面的语句.所以在第三个值为true,直接执行后面的语句时.send之后数据还未接收到,所以会为undefined.可以写如下代码测试:sendServer();setTimeout(function(){ alert(stateString);},5000);//延迟五秒之后再alert(),这时就是有数据的;
解决方案二:
我的理解为:sendServer(),是一个AJAX异步在执行的方法,如果有反回值他会回调callback,所以在callback中有值,但是在CLICK中他不会等sendServer()是否执行完,所以CLICK中没有打印结果(他不会等). 首先申明,对AJAX不是太熟.