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) до того, как будет выполнен вызов, и до того, как сможет проверить возвращаемые значения.

Если вы хотите "исправить" это, посмотрите этот вопрос.

Можно ли установить async:false для вызова $.getJSON?

Другие вопросы по тегам