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/

ここに動作するデモがあります

PS

いくつかの回答で示唆されているように、設定async:falseは1つのオプションです(決して利用しないでください!!!)が、jQueryバージョン1.8以降は非推奨です

于 2013-03-06T05:38:43.270 に答える
1

$.getJSON は非同期です。つまり、コードの残りの部分が実行されている間に呼び出しが行われます。呼び出しが行われる前、および返された値をチェックする前に、 if(checkval == true) になっています。

これを「修正」したい場合は、この質問を参照してください。

async:false を $.getJSON 呼び出しに設定することは可能ですか?

于 2013-03-06T05:38:47.430 に答える
1

内側の場合は2番目を入れてください:

$.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 に答える