ajax 同步问题
时间:2011-09-15
来源:互联网
function xx(form){
var yzm = form.yzm.value;
var url = "chkyzm.php?yzm="+yzm;
var isy = false;
xmlhttp.open("GET",url,true);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
var msg = xmlhttp.responseText;
if(msg == 2){
alert("验证码输入错误!");
form.yzm.value = "";
form.yzm.focus();
RefreshImage(form);
}else if(msg == 1){
isy = true;
}else{
alert("未知错误!");
}
}
alert("*****11111*****");
}
xmlhttp.send(null);
alert("*****22222*****");
return isy;
}
此代码中 alert("*****11111*****"); 会执行好多次, 该代码执行完一次 执行 alert("*****22222*****");
然后继续执行 alert("*****11111*****");
我要实现的 执行完xmlhttp.onreadystatechange = function()方法 然后继续往下执行,不然 isy结果不是我要的
麻烦各位了
var yzm = form.yzm.value;
var url = "chkyzm.php?yzm="+yzm;
var isy = false;
xmlhttp.open("GET",url,true);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
var msg = xmlhttp.responseText;
if(msg == 2){
alert("验证码输入错误!");
form.yzm.value = "";
form.yzm.focus();
RefreshImage(form);
}else if(msg == 1){
isy = true;
}else{
alert("未知错误!");
}
}
alert("*****11111*****");
}
xmlhttp.send(null);
alert("*****22222*****");
return isy;
}
此代码中 alert("*****11111*****"); 会执行好多次, 该代码执行完一次 执行 alert("*****22222*****");
然后继续执行 alert("*****11111*****");
我要实现的 执行完xmlhttp.onreadystatechange = function()方法 然后继续往下执行,不然 isy结果不是我要的
麻烦各位了
作者: sle1324587 发布时间: 2011-09-15
异步操作的话,只能在回调函数内继续执行相关操作
可以把 isy 作为全局变量操作
HTML code
可以把 isy 作为全局变量操作
HTML code
<script> var isy = false; function xx(form){ var yzm = form.yzm.value; var url = "chkyzm.php?yzm=" + yzm + "&" + escape(new Date()); xmlhttp.open("GET",url,true); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4){ var msg = xmlhttp.responseText; if(msg == 2){ alert("验证码输入错误!"); form.yzm.value = ""; form.yzm.focus(); RefreshImage(form); }else if(msg == 1){ isy = true; //DO_NEXT(); }else{ alert("未知错误!"); } alert("*****11111*****"); } } xmlhttp.send(null); } </script>
作者: hookee 发布时间: 2011-09-15
改成同步的,要么就要将你要在ajax执行完毕后的代码在回调完成后执行,而不是return,没意义
JScript code
JScript code
function xx(form) { var yzm = form.yzm.value; var url = "chkyzm.php?yzm=" + yzm; var isy = false; xmlhttp.open("GET", url, false);//////改成同步的,不需要状态转换函数 /*xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4) { var msg = xmlhttp.responseText; if (msg == 2) { alert("验证码输入错误!"); form.yzm.value = ""; form.yzm.focus(); RefreshImage(form); } else if (msg == 1) { isy = true; } else { alert("未知错误!"); } } alert("*****11111*****"); }*/ xmlhttp.send(null); /////////////////////////send完后可以直接使用xhr对象属性 var msg = xmlhttp.responseText; if (msg == 2) { alert("验证码输入错误!"); form.yzm.value = ""; form.yzm.focus(); RefreshImage(form); } else if (msg == 1) { isy = true; } else { alert("未知错误!"); } // alert("*****22222*****"); return isy; }
作者: showbo 发布时间: 2011-09-15
因为异步的问题 所以isy这个变量必须要在回调函数中处理
JScript code
将来你就可以这么调用xx
xx(你的form,function(flag){
//这个flag就是你的isy经过ajax处理后的值
//...do next
})
JScript code
function xx(form,callback){ var yzm = form.yzm.value; var url = "chkyzm.php?yzm=" + yzm + "&" + escape(new Date()); var isy = false; xmlhttp.open("GET",url,true); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4){ var msg = xmlhttp.responseText; if(msg == 2){ alert("验证码输入错误!"); form.yzm.value = ""; form.yzm.focus(); RefreshImage(form); }else if(msg == 1){ isy = true; }else{ alert("未知错误!"); } alert("*****11111*****"); callback(isy);//直接执行callback 将isy作为参数传入 } } xmlhttp.send(null); }
将来你就可以这么调用xx
xx(你的form,function(flag){
//这个flag就是你的isy经过ajax处理后的值
//...do next
})
作者: fanchuanzhidu 发布时间: 2011-09-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28