【发布时间】:2019-02-15 05:24:23
【问题描述】:
我正在做一个学校项目,我需要在不制作真实数据库的情况下验证一些用户。我的问题是,当我将输入中输入的信息与存储在 JSON 中的信息进行比较时,它会为每个不匹配的选项弹出一个错误。我想要的是将多个错误减少为一个(以防用户名或密码与存储在 JSON 中的信息不匹配)。这是我的 JavaScript:
const form = document.querySelector('form');
form.addEventListener('submit', function(e){
e.preventDefault();
const emailInput = document.querySelector('#email').value;
const pwdInput = document.querySelector('#pwd').value;
const object = {
email: emailInput,
pwd: pwdInput
};
fetch('users.json')
.then(res => res.json())
.then(data => {
data.forEach(function(user) {
const userInfo = JSON.stringify(user);
const databaseInfo = JSON.stringify(object);
if(userInfo === databaseInfo) {
console.log('success');
} else {
console.log('err');
}
});
})
.catch(error => console.log('error'));
});
这是用 JSON 制作的假数据库:
[
{"email": "James", "pwd": "1111"},
{"email": "Peter", "pwd": "2222"},
{"email": "Josh", "pwd": "3333"}
]
【问题讨论】:
-
您似乎应该比较值而不是对象。所以像
user.email === object.email && user.pwd === user.pwd)你的JSON.Stringify这样的东西也可能是不必要的。然后,对于您仅有的 1 个错误位,您可以添加一个名为 found 的布尔值,如果上述条件为真,则将其设置为 true。然后在循环之外检查该变量,如果它的false记录一个未找到的错误 -
您需要
==而不是===。示例代码:jsfiddle.net/khrismuc/j3g950kq -
嘿!感谢您的回复,但我是 JavaScript 新手,不理解您所说的关于布尔值的最后一部分。我试过这个但没有奏效: if(user.email === object.email && user.pwd === object.pwd) { var flag = true; console.log('succ'); } else if (flag = false) { console.log('err'); }
-
@Santiago 在 forEach 循环之前将标志初始化为 false,如果找到则将其设置为 true。下一步是在
forEach循环之外检查一次
标签: javascript arrays json error-suppression