0

以下のコーディングから、一部のデータが間違っている場合、false を警告します。確認された pw がパスワードと同じでない場合は正常に機能します。ただし、loginID チェックに問題があると思われる場合は、. true789 false false123 false456 をそれぞれ警告します。結果が false123 false456 false789 false ではないのはなぜですか? jsonからの遅延のため?それを解決する方法は?

var result = "true";

$('#test').click(function(){
    validation();
    alert(result);  
});

function validation(){  
    result = "true";
    var loginID = $("#loginID").val();
    var role = $("#role").text();

    // check Login Name
    if (loginID == "" || loginID == null){
        $('#errorID').empty();
        $('#errorID').append(
            '<h6>' + "The Login Name cannot be empty" + '</h6>'
        );
        $("#errorID").show();
        result="false";
    } else {
        $.ajax({
            type: "GET",
            dataType: "jsonp",
            jsonpCallback: "jsoncallback",
            data: {
                ID: loginID,
                role: role          
            },
            url: "http://mydomain.com/checkID.php?jsoncallback=?",

            success: function(data){
                if (data[0].data.user_name!=""){    
                    result="false";
                    alert(result+"123");
                    $('#errorID').empty();
                    $('#errorID').append(
                        '<h6>' + "The Login Name " + data[0].data.user_name + 
                        " is used." + '</h6>'
                    );
                    $("#errorID").show();
                    alert(result+"456");
                }
            },
            error: function(jqXHR, textStatus, errorThrown){
                alert("Request failed: " + textStatus + errorThrown);
                result="false";
            }
        }); //end of ajax
    }
    alert(result+"789");            
    return result;
} // end of #validation
4

1 に答える 1

1

ajax呼び出しは非同期で行われます。それはajax()関数に入り、次に続行し、結果が最終的にアラートまたはイベントハンドラーにあるものがトリガーされるときに発生します。async : falseajax呼び出しにを追加して、実行方法を変更できます。789アラートは、ajax呼び出しが完了して応答した後にのみ実行されます。また、ドメインに対してajax呼び出しが行われる場合は、jsonpCallbackは必要ありません。応答のヘッダーが必要な場合は、dataTypeもapplication/json削除し、jQueryに任せて正しく処理する必要があります。

于 2013-03-22T08:12:52.063 に答える