废话不多说, 上源码
function reg() {
var txtName = $("#<%=txtName.ClientID%>");
var lblName = $("#<%=lblName.ClientID%>");
if (txtName.val().length == 0) { //如果账号为空
lblName.text("×请输入用户名").css("color", "red");
return false;
}
else if (txtName.val().length < 6) {
lblName.text("×用户名不能少于6位").css("color", "red");
return false;
}
else {
$.ajax({
type: 'POST', //用POST方式传输
dataType: 'json', //数据格式:JSON
url: 'checking.ashx', //目标地址
data: 'name=' + txtName.val(), //文本框里的用户名
//接收数据完毕
success: function (json) {
if (json.verify == '0') {
$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green");
alert('草泥马成功了');
return true;
} else {
$("#<%=lblName.ClientID%>").text("×用户已被注册").css("color", "red");
return false;
}
}
});
}
return false;
}
问题是无论怎样, 这个方法都是返回false; 我执行到$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green"); 这狗日的还是给我返回false, js 大牛快来看看 , 100分属于你!!
function reg() {
var txtName = $("#<%=txtName.ClientID%>");
var lblName = $("#<%=lblName.ClientID%>");
if (txtName.val().length == 0) { //如果账号为空
lblName.text("×请输入用户名").css("color", "red");
return false;
}
else if (txtName.val().length < 6) {
lblName.text("×用户名不能少于6位").css("color", "red");
return false;
}
else {
$.ajax({
type: 'POST', //用POST方式传输
dataType: 'json', //数据格式:JSON
url: 'checking.ashx', //目标地址
data: 'name=' + txtName.val(), //文本框里的用户名
//接收数据完毕
success: function (json) {
if (json.verify == '0') {
$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green");
alert('草泥马成功了');
return true;
} else {
$("#<%=lblName.ClientID%>").text("×用户已被注册").css("color", "red");
return false;
}
}
});
}
return false;
}
问题是无论怎样, 这个方法都是返回false; 我执行到$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green"); 这狗日的还是给我返回false, js 大牛快来看看 , 100分属于你!!
注释掉看下
{
alert(json.verify的值是多少?) ...
}
url:"selectFakeAction.action",
async:false,//设置同步
如果 alert(json.verify) 看到的是 0 那么 if (json.verify+0 ==0)看看
if (json.verify == '0') {
$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green");
alert('草泥马成功了');
return true;
} else {
$("#<%=lblName.ClientID%>").text("×用户已被注册").css("color", "red");
return false;
}
}
error :function(josn){
alert(json)
}
______________________
如果后台返回的不是JSON格式的字符串,是走error指定的函数的。
正确,ajax默认异步执行。虽然ajax提交了,但是先返回下面的false
呵呵,你这是异步执行啊,你执行了function (json) 函数,返回return true;但这个值并不属于function reg() 这个函数的
JQ里我不懂,但是在纯JS里的,代码在执行到这一块时:
else {
$.ajax({
type: 'POST', //用POST方式传输
dataType: 'json', //数据格式:JSON
url: 'checking.ashx', //目标地址
data: 'name=' + txtName.val(), //文本框里的用户名
//接收数据完毕
success: function (json) {
if (json.verify == '0') {
$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green");
alert('草泥马成功了');
return true;
} else {
$("#<%=lblName.ClientID%>").text("×用户已被注册").css("color", "red");
return false;
}
}
});
}
//这时候工作进程会新开一条线程去处理这个请求,也就是异步的说法
而本身的主线程(也就是reg()函数),则不会等待异步,在分好新线程服务于异步请求后,将继续执行自己当前线程的后继代码//这里补充一下,自由微软官方的异步回调机制有个参数可以指定是同步或者异步执行Ajax的,不过有点烦,这个机制服务处理只能有一个,不灵活,所以我喜欢自己写
或者像3楼说的设置同步,但是一般不建议这么做。
后台返回是JSON ! 设置同步。。我试试
不行啊 ,设置了同步,虽然ajax方法返回true了, 但是reg()返回的还是false , 难道ajax返回的ture不属于reg() ????
在ajax成功的对调函数中。不用调方法 , 我需要获取的是返回的true . 大牛 你直接把代码晒出来吧 - -!
var serverRegSuccess = false;
$.ajax({
type: 'POST', //用POST方式传输
dataType: 'json', //数据格式:JSON
url: 'checking.ashx', //目标地址
data: 'name=' + txtName.val(),
async: false,
success: function (json) {
if (json.verify == '0') {
$("#<%=lblName.ClientID%>").text("√恭喜您用户名可以注册").css("color", "green");
alert('草泥马成功了');
serverRegSuccess = true;
} else {
$("#<%=lblName.ClientID%>").text("×用户已被注册").css("color", "red");
serverRegSuccess = false;
}
}
});
}
return serverRegSuccess;
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form>
please enter: true or false
<input type='text' id='txt' onchange='document.getElementById("div").innerHTML="";' value='false' />
<br />
<input type="submit" onclick="return ajax();" id='btn' value='click me'/><div id='div'></div>
</form>
</body>
</html>
<script type="text/javascript">
var ajax=function(){
if(document.getElementById('btn').flag){
alert('成功会执行到我');
return true;
}
else{
setTimeout(callback,2000);
}
return false;
}
var callback=function(){
var result=document.getElementById('txt').value;
if(result=='true'){
document.getElementById('btn').flag=true;
document.getElementById('btn').click();
}
else{
document.getElementById('div').innerHTML='error';
}
}
</script>