0

这是我的代码,我在这里传递输入的用户名和密码值。我已经编写了将使用 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

4 回答 4

1

在密码和用户名与您的代码匹配之前,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/

这是工作演示

附言

正如一些答案所建议的那样,设置async:false是一个选项(从不使用它!!!),但由于 jQuery 版本 1.8,它已弃用

于 2013-03-06T05:38:43.270 回答
1

$.getJSON 是异步的。这意味着它会在您的其余代码运行时进行调用。在进行调用之前以及在它可以检查返回的值之前,它会到达 if(checkval == true) 。

如果您想“解决”这个问题,请参阅此问题。

是否可以将 async:false 设置为 $.getJSON 调用

于 2013-03-06T05:38:47.430 回答
1

将第二个 if 放在里面:

$.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-----!!!!!");
    }
});
于 2013-03-06T05:40:41.390 回答
1

ajax 是异步的,你的函数在它可以检查返回值之前调用

在 $.getJson 上方添加以下行

$.ajaxSetup({async:false});
于 2013-03-06T05:42:16.857 回答