function checkUsername(username)
{
var check = username.match(/^[a-zA-Z0-9_-]{6,16}$/);
var ret;
if(check)
{
$.ajax({
url: '<?php echo base_url('login/ajaxUsernameExist')?>',
type:'post',
data:"username = " + username,
dataType:'json',
success:function(data){
ret = parseInt(data.result);
},
error:function(data)
{
ret = 3;
}
});
return ret;
}
else
{
return 1;
}
}
代码如上所示,发现当分支进入ajax中的时候,会出现ret是undefined,请问在$.ajax中对ret赋值没有效果是什么原因?
这个是因为在执行success函数或者error函数时,上下文已经被切换了。ret在success或者error中就变成未定义的了。你可以将其命名为全局变量。或者使用jQuery Tiny Pub/Sub等技术解决。Good luck.
在 $.ajax({ 里面增加 async:false 变成同步,你的 return 就有效了
Ajax的A是什么意思?Asychronous异步。也就是说在你return ret时,success还没有执行,当然会变成undefined了。请理解回调这个概念,然后把你需要使用yet的地方放入一个function中当参数传进checkUsername里面并放入success里面执行,而不是把yet返回出去。