这是我的代码:
$.each(json.ids, function(i, v) {
if ($("#user").val() === v.username) {
if ($("#pw").val() === v.password) {
window.location = '/menu.html';
return; //THIS RETURN
}
$("#errorblock").text("incorrect password").show().fadeOut(1000);
return false;
}
event.preventDefault();
$("#errorblock").text("no user found").show().fadeOut(1000);
});
json是一个包含json格式数据的变量。奇怪的是,一旦你输入嵌套的if(if ($("#pw").val() === v.password)
),窗口就会正确地改为menu.html,但是在更改窗口之前,“不正确的密码”或“找不到用户”这些词会闪烁。我可以用一些解决方法解决这个问题,但我很好奇为什么会发生这种情况 - 不应该返回只是停止执行代码?这里有一些语法(或其他)错误我应该修复以防止这种情况吗?
答案 0 :(得分:0)
不是在每个中执行逻辑,而是在处理之前先找到用户。
var username = $("#user").val();
var password = $("#pw").val();
//find the user based on their username
var user = $.grep(json.ids, function(user){
return user.username === username;
});
//if you found a user, check their password
if (user.length) {
if (user[0].password === password) {
//redirect them for good case
window.location = '/menu.html';
} else {
//show incorrect password message
$("#errorblock").text("incorrect password").show().fadeOut(1000);
}
} else {
//no user found, do whatever
event.preventDefault();
$("#errorblock").text("no user found").show().fadeOut(1000);
}
但是,我应该注意,在前端执行密码验证是非常糟糕的主意。