首先百度解释一下同步和异步的区别:
Java中交互方式分为同步和异步两种,异同情况如下:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。
问题代码:
var vncode = null;
$("div[id^='lo']").hide();
//验证用户名是否存在
$("#username").blur(function () {
if (this.value == "") {
$("#lodiv1").html("请输入用户名!");
$("#lodiv1").show();
usernameF = false;
} else {
var uname = this.value;
$.ajax({
//地址
url: "selectusername",
//方式
type: "post",
//传递的参数
data: {"uname":uname},
//返回结果
success: function(result) {
console.log( typeof result);
vncode =result;
}
})
if(vncode=='102'){
alert("1")
$("#lodiv1").html("用户名已存在!");
$("#lodiv1").show();
usernameF = false;
}else{
alert("0")
$("#lodiv1").hide();
usernameF = true;
}
}
})
后台代码:
request.setCharacterEncoding("utf-8");
String uname = request.getParameter("uname");
SelectUserNameService suns = new SelectUserNameService();
User user = new User();
user = suns.selectUserName(uname);
int vncode;
if(user!=null) {
vncode = 102;
response.getWriter().print(vncode);
response.flushBuffer();
}else {
vncode = 101;
response.getWriter().print(vncode);
}
}
运行出现问题:
输入已存在用户名:
结果看是没问题,输入不存在用户名:
却依旧提示错误信息,然后再次输入存在的用户
这回提示错误信息却隐藏了。
而这就是因为异步请求的问题,所以在我们把异步请求关了就可以了,
$.ajax({
//关掉异步请求
async:false,
//地址
url: "selectusername",
//方式
type: "post",
//传递的参数
data: {"uname":uname},
//返回结果
success: function(result) {
console.log( typeof result);
vncode =result;
}
})
或者把条件语句放在ajax方法里面:
//验证用户名是否存在
$("#username").blur(function () {
if (this.value == "") {
$("#lodiv1").html("请输入用户名!");
$("#lodiv1").show();
usernameF = false;
} else {
var uname = this.value;
$.ajax({
// //关掉异步请求
// async:false,
//地址
url: "selectusername",
//方式
type: "post",
//传递的参数
data: {"uname":uname},
//返回结果
success: function(result) {
console.log( typeof result);
vncode =result;
if(vncode=='102'){
alert("1")
$("#lodiv1").html("用户名已存在!");
$("#lodiv1").show();
usernameF = false;
}else{
alert("0")
$("#lodiv1").hide();
usernameF = true;
}
}
})
}
})