今天在做一个检验用户名是否已注册的验证功能时,发现 ajax 回调函数的返回值判断是否相等时出了一些问题,明明打印出来跟判断的字符一模一样,结果就是不相等。
Ajxa 代码:
function validateNameIsReply(){
var empNameNode = $("#empNameInput");
var empNameValue = empNameNode.val();
$.ajax({
url : "${path}/checkNameIsReply",
data :"empName="+empNameValue,
type : "POST",
success : function(result){
alert(result);
alert(result == "该用户名已被注册");
}
})
}
后台代码:
@RequestMapping("/checkNameIsReply")
public void checkNameReply(@RequestParam("empName")String empName, HttpServletResponse response) {
List<Employee> empList = employeeService.findEmpByName(empName);
String result = "";
if(empList.size() > 0) {
result = "该用户名已被注册";
}
try {
response.setContentType("text/html; charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
注册时,注册一个一样的用户名时,result 的值返回了 "该用户名已被注册"
alert(result); 的显示
alert(result == "该用户名已被注册"); 的显示
一样的字符串为什么判断相等时就相等呢,经过查找资料知道
虽然两个字符串肉眼看上去没有区别,但是用 setCharacterEncoding("UTF-8") 处理后可能不一样(这里我暂时也不太确定哪里出的问题,网上别人是这样说的)(我处理后发现有个字符串前面有 %EF%BB%BF,另一个则没有 )
解决方法 :
在判断前先调用 trim() 方法去掉返回的字符串首尾空格
alert( result.trim() == "该用户名已被注册" )
判断的结果是 true
更多推荐
关于Ajax回调函数返回值判断的问题
发布评论