问题描述
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了 各位大虾,到底是怎么回事啊? 问题补充:garson328 写道
解决方案
从你的代码来看,确实有些让我看不明白,第一个function toAgentQuery()的{没结束就出现第二个function sendRequest(url)了。而最后一行多了个},是不是你一直在用这种嵌套function?
解决方案二:
responseText还是不要在同步下获取,ajax同步模式下,你的show函数是正常的回调函数,所以能够执行,但responseText在同步模式下是获取不到服务端写入的数据的。ajax异步模式下,回调函数虽说能够执行多次,但上例中你的xmlhttprequest却被视为只声明了一次,也就是第二次undefined了,而同步模式下每次都会声明一次,所以你在同步模式下出现1——4是正常的。简单地说,同步模式页面每次都会刷新,所以前端js代码每次都会重新执行,而异步模式在提交到后端的同时,前端js还在进行无刷新的执行,所以你的xmlhttprequest只在第一次才有效。
解决方案三:
这是因为设置同步的时候,等到服务器返回的时候,responseText是空字符串这是因为设置异步的时候,并没有服务器返回,你就alert(flag)了,因为这个时候服务器还没有返回,所以responseText 还没有值,就成undefined了