JQuery читать из файла Json
Это мой код, здесь я передаю вводимые имя пользователя и пароль. Я написал функцию, что вход будет проверяться с помощью файла JSON. Если данный вход существует, будет отображаться предупреждение "Логин правильный", в противном случае будет отображаться сообщение "Логин неверный".
но здесь для меня всегда отображается "неверный логин". Я знаю, что не так в этой функции. Я попытался с помощью переменной массива в функции для хранения данных файла JSON. тогда это работает правильно. У меня проблемы с проверкой файла JSON.
помогите мне решить эту проблему. Мой вход должен быть проверен с помощью файла JSON, существует он или нет.
<!DOCTYPE html>
<html>
<head>
<script src="jquery.js">
</script>
<script>
$(document).ready(function()
{
var a="user2";
var b="password2";
var checkval = false;
$.getJSON('login.json', function(data)
{
$.each(data,function(i,obj)
{
if(obj.username == a && obj.password == b)
{
checkval = true;
return false;
}
});
});
if(checkval == true)
{
alert("login correct");
}
else
{
alert("!!!!!-----Incorrect login Details-----!!!!!");
}
});
</script>
</head>
<body>
</body>
</html>
и это мой файл login.json
[
{
"username": "user1",
"password": "password1"
},
{
"username":"user2",
"password" : "password2"
}
]
4 ответа
ajax асинхронен до того, как пароли и имена пользователей соответствуют вашему коду
if(checkval == true)
{
alert("login correct");
}
else
{
alert("!!!!!-----Incorrect login Details-----!!!!!");
}
выполняется, попробуйте
$.getJSON('login.json', function(data)
{
$.each(data,function(i,obj)
{
if(obj.username == a && obj.password == b)
{
checkval = true;
return false;
}
});
if(checkval == true)
{
alert("login correct");
}
else
{
alert("!!!!!-----Incorrect login Details-----!!!!!");
}
});
Вот небольшое доказательство того, что когда ajax не используется, он работает http://jsfiddle.net/aKVC2/
и вот рабочая ДЕМО
PS
в соответствии с некоторыми настройками ответов async:false
это одна из опций (никогда не пользуйтесь ею!!!), но с версии jQuery 1.8 его УСТАРЕЛО
Поместите второе, если внутри:
$.getJSON('login.json', function(data) {
$.each(data,function(i,obj){
if(obj.username == a && obj.password == b){
checkval = true;
return false;
}
});
if(checkval == true){
alert("login correct");
}else{
alert("!!!!!-----Incorrect login Details-----!!!!!");
}
});
ajax асинхронный, ваша функция вызывает до того, как сможет проверить возвращаемое значение
добавить строку ниже чуть выше $.getJson
$.ajaxSetup({async:false});
$.getJSON async.. означает, что он выполняет вызов, пока выполняется остальная часть вашего кода. Он получает if(checkval == true) до того, как будет выполнен вызов, и до того, как сможет проверить возвращаемые значения.
Если вы хотите "исправить" это, посмотрите этот вопрос.