欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

服务器响应同步有关问题

更新时间: 2014-01-05 01:54:23 责任编辑: Author_N1

 

服务器响应同步问题

//创建ajax请求对象
function createXml() {
if( window.XMLHttpRequest ) {
return new XMLHttpRequest();
} else if( window.ActiveXObject ) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}

//发送请求
function sendAjax(url, mode) {
var xmlHttp=createXml();
if(xmlHttp) {
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = function(){ callback(xmlHttp, mode); };
xmlHttp.send(null);
}
}
//回传方法
function callback(xmlHttp, mode) {
if(xmlHttp.readyState==4) {
if(xmlHttp.status==200) {
showResult(xmlHttp, mode);
}
}
}
//显示检测结果
function showResult(xmlHttp, mode) {
var rtnVal = xmlHttp.responseXML.getElementsByTagName("rtnVal")[0].firstChild.data;
if(mode=="check") {
if(rtnVal=="NAME_EXISTS") {
document.getElementById("txtData").value="该用户名已被注册";
} else if( rtnVal=="NAME_AVAILABLE") {
document.getElementById("txtData").value="";
}
} else if(mode=="fetch") {
salt=rtnVal;
}
}

function doTest() {
var url = "RegisterServlet?name=abcdefg";
document.getElementById("txtData").value="检测中...";
sendAjax(url, "check");
alert(document.getElementById('txtData').value=='');
//setTimeout("alert(document.getElementById('txtData').value=='');",1000);
}


在doTest()方法中,如果不延时alert结果就是false,延时alert才是true。。。我猜测是因为不延时的话,从服务器来的结果还没来得及更新到txtData中。

问题:
(1)可以从理论上给我讲一下这具体是怎么一个原理吗?
(2)如何才能实现,在接收到服务器的返回值更新到txtData中后再alert(除了用延时的方法)?
--参考方法--
xmlHttp.open("GET", url, true); 这是异步的

   document.getElementById("txtData").value="检测中...";
    sendAjax(url, "check");  //异步取,不等请求返回就往下执行了
    alert(document.getElementById('txtData').value==''); //这时值还是 "检测中..."

 alert(document.getElementById('txtData').value==''); 这句放到 showResult 里最后 就行了

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 01:54:23
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/2864/
本文WWW.DOC100.NET DOC100.NET版权所有。