jquery的ajax请求尚未完成,就会接着执行后面的代码吗?

当一个注册表单的提交按钮点击后,通过绑定的时间来确定用户名、邮箱等是否有效,最后来确定是否提交表单。先设置一个变量status值为true,然后通过ajax来判断用户名、邮箱等是否已经注册,如果已注册就在回调函数中设置status的值为false,最后再判断status的值是true还是false来决定是否提交。判断status的代码写在ajax的后面,但是还是先执行了判断status的代码,再执行了ajax回调函数中设置status的代码,不知道该怎么做?
window.cb={};
cb.register={};
$('#register-submit').click(function(){
var$self=$(this);
var$form=$(this).closest('#register-form');
var$username=$form.find('#register-username');
varusername=$username.val();
cb.register.status=true;
if(!username.match(/^[0-9a-z_\u4e00-\u9af5]{2,14}$/i))
{
$username.next('span').remove();
$username.after('无效的用户名');
cb.register.status=false;
}
else
{
$username.next('span').remove();
$.post('/auth/ajax',{username:username},function(data){
if(data.status==false)
{
$username.after('用户名已注册');
cb.register.status=false;
}
},'json');
}
var$email=$form.find('#register-email');
varemail=$email.val();
if(!email.match(/^[0-9a-z_\-]+@[0-9a-z_\-]+\.[a-z]{2,4}$/i))
{
$email.next('span').remove();
$email.after('无效的邮箱');
cb.register.status=false;
}
else
{
$email.next('span').remove();
$.post('/auth/ajax',{email:email},function(data){
if(data.status==false)
{
$email.after('邮箱已注册');
cb.register.status=false;
console.log(cb.register.status);
}
},'json');
}
var$pwd=$form.find('#register-password');
varpwd=$pwd.val();
if(!pwd.match(/^[0-9a-z_\-#@$*%&]{6,16}$/i))
{
$pwd.next('span').remove();
$pwd.after('无效的密码');
cb.register.status=false;
}
console.log('hello');
console.log(cb.register.status);
returnfalse;
if(cb.register.status==false){
returnfalse;
}
$.post('/auth/register',{email:email,name:username,password:pwd},function(data){
if(data.status==true)
{
$self.css('display','none');
var$message=$('#message');
vars1='注册成功';
vars2='一封邮件已发送到邮箱,请在1小时内验证(过期后需重新发送验证邮件)';
$message.find('.message-body').append(s1+s1);
}
else
{
var$token=$form.find('#token');
$token.attr('name',data.token.name);
$token.attr('value',data.token.value);
$form.find('.submit-tips').remove();
$form.prepend('注册失败,请重新提交
');
}
},'json');
returnfalse;
});
慕容森
浏览 410回答 2
2回答

温温酱

1)ajax请求时异步的,也就是请求后,你必须在回调函数中得到请求的结果,执行后续的判断,当然你可以设置成同步的:)2)你的处理逻辑可以稍微修改下,把用户的输入信息验证一次性处理,而不是分段处理3)最后的后台验证合并成一个请求,在这个请求中统一处理用户名/邮箱的问题分段处理用户体验会更好但是一定还是要记住ajax请求是异步的

回首忆惘然

因为ajax是异步的,所以你后面的判断应该放在回调函数中(就是你判断返回值的地方),而不是放在外面!还有建议你不要这么去做,单纯的ui字段验证(输入是否合法),先做,之后再去后端查是否被注册过。查询是否被注册过最好能用1个请求来,你这样分成2个,嵌套起来太麻烦了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript