星期天一个人捣鼓个人网站的事情,read8686.com,如果哪位开发者又欢迎大家一起探讨,在文章的有我的微信
就是这样的一个注册的页面,其实我要实现的功能是什么啊,就是在用户注册的时候判断在数据库里面是否存在相同的邮箱和用户名,如果这样的就允许进行注册,注册我用到了两个接口,一个是在注册之前去判断是否存在相同的用户名,和邮箱,另外的一个接口是将用户所有输入的信息传递到后台
按照这个逻辑,我应该首先是判断是否存在相同的用户名:
function isAlreadyHaveUser(email, loginname) {
var num=1;
var param = {
"email" : email,
"loginname" : loginname
}
$.ajax({
url : localhostPaht + projectName
+ "/userinfo/isalreadyuser",
type : 'post',
data : JSON.stringify(param),
dataType : 'json',
contentType : 'application/json;charset=utf-8',
success : function(data) {
num=data.count;
},
error : function(error) {
console.log('接口不通' + error);
num=0;
}
});
return num;
}
这个便是我的调用接口用到的代码了,这个是用来判断的,我们可以注意到的是在这个代码里面是存在一个返回值的,并且这个返回值是在调用了接口之后才能进行确定,但是我在使用的使用,也就是点击注册的时候:
$("#registbtn").on("click",function() {
var loginname = $("#loginname").val();
var email = $("#email").val();
var phone = $("#phone").val();
var password = $("#password").val();
var confirmpwd = $("#confirmpassword").val();
if (!dataValidate(password, confirmpwd)) {
layer.alert("两次密码输入不一致");
} else {
var params = {
"loginname" : loginname,
"email" : email,
"phone" : phone,
"password" : password
};
if (isAlreadyHaveUser(email,loginname) == 0) {
$.ajax({
url : localhostPaht+ projectName+ "/userinfo/userregister",
type : 'post',
data : JSON.stringify(params),
async:false,
dataType : 'json',
contentType : 'application/json;charset=utf-8',
success : function(data) {
layer.alert(data.msg,function() {
window.location.href = "login.html";
});
},
error : function(error) {
console.log('接口不通'+ error);
}
});
} else {
layer.alert("注册失败");
}
}
});
这个时候我点击注册按钮的时候进行的操作:
isAlreadyHaveUser(email,loginname) == 0 关键是这个条件,始终为false
我想后台应该返回为0 的,为什么这个判断条件始终为false,我console.log(isAlreadyHaveUser(email,loginname)),输出的结果是undefined,为什么是没有定义,很奇怪其实也不奇怪,这个里面有用到的ajax的同步和异步的问题,之前一直听说ajax的同步和异步,但是也没有遇到过具体的情景,其实是这样的我们知道ajax在执行代码 时候并没有顺序性,也就是说可能我在调用第一个接口还没有结束,这样地方就开始判断,当然这个时候是没有返回值的,所以是没有定义。
关键就是我们需要在第一个接口调用的之后执行结束然后再去执行其他的函数,这个就涉及到同步,所谓的同步就是等我做完这件事情之后然后再去做其他的事情,但是异步是我这事情还没做完,我就要做其他的事情了。
ajax默认的是异步的,也就是这件事情还没做完,就可以去执行其他的js代码了,我们应该在等第一个接口调用完毕之后再去调用第二个接口,也就是我们需要让第一个的ajax同步执行
AJAX中根据async的值不同分为同步(async = false)和异步(async = true)两种执行方式;
我在第一个接口中添加属性:async=false,这样就实现了第一个ajax执行接口有返回值之后去执行第二个ajax
同步异步的问题我是这样理解的,希望对有所帮助
下面是我的微信号,希望和大家一起学习交流: