问题描述
- js中使用ajax函数做同步请求Servlet连接数据库进行验证
-
这是一个js表单验证,验证email的部分,我想达到的目的是在输入email信息结束后进行验证,前两个条件直接自身进行验证,效果已经实现了,后面的那个我想用ajax的效果进行同步验证,防止email重复,但是效果一直出不来,不知道是否是ajax函数参数设置有问题什么的,或者eclipse出bug什么的,请问有人帮忙看一下的么?
email输入部分代码:Email:
id="email" class="input" value="" />js代码如下:
function validateEmail() {
$("#emailError").css("display", "none");
var bool = true;
var val = $("#email").val();
if(!val) {
$("#emailError").text("Email不能为空!");
$("#emailError").css("display", "");
bool = false;
} else if(!/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(val)) {
$("#emailError").text("错误的Email格式!");
$("#emailError").css("display", "");bool = false;
} else {
$.ajax({
url:"/goods/UserServlet",
data:{method:"ajaxValidateEmail",email:value},
type:"POST",
dataType:"json",
async:false,
cache:false,
success:function(result){
if(!result){
$("#emailError").text("该邮箱已经被注册了");
$("#emailError").css("display", "");
bool = false;
}
}
});
}
return bool;
}请求的Servlet的函数如下:
public void ajaxValidateEmail(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
boolean emailPass = userService.ajaxValidateEmail(email);
response.getWriter().print(emailPass);
}service部分:
public boolean ajaxValidateEmail(String email){
return userDao.ajaxValidateLoginname(email);
}数据库层代码:
public boolean ajaxValidateEmail(String email){
String sql = "select count(1) from t_user where email=?";
try {
Number number = (Number)queryRunner.query(sql, new ScalarHandler(), email);
return number.intValue() == 0;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
解决方案
$.ajax({
url:"/goods/UserServlet",
data:{method:"ajaxValidateEmail",email:value},
type:"POST",
dataType:"text",//这样改一下
async:false,
cache:false,
success:function(result){
//打印一下result试试看是什么结果
console.log(result);//chrome 按f12,看Console选项卡,可以看到结果.
if(!result){
$("#emailError").text("该邮箱已经被注册了");
$("#emailError").css("display", "");
bool = false;
}
}
});