0

私は単純な HTML フォームを持っています。javascript を使用してフォームの一連の検証を実行しようとしています。

$("#sign_in_form").submit(function(event){
    event.preventDefault();
    if(check_validity()){
        console.log("valid");
        return true;
    } else {
        console.log("invalid");
        return false;
    }

    console.log("end of function");    
});

check_validity()は時間のかかる機能です。データベースからのデータをチェックし、true または false で応答します。しかし、上記の関数は、チェックの有効性が完了する前に、完了するのを待たずにステートメントcheck_validityを実行するようです。else

これを修正するにはどうすればよいですか? おそらくコールバック関数を使用すると、これを修正できます。しかし、コールバックを使用して戻り値を受け取るにはどうすればよいでしょうか?

function check_validity(){
    $.post("http://xxxx.com/check_if_user_exists",
    {email: $("#contact_person_email").val()},
    function(data){
        if(parseInt(data) == 1)
            return false;
        else
            return true;
    });
} 
4

1 に答える 1

1

jquery deferredを使用します。

function check_validity(){
    return $.post("http://xxxx.com/check_if_user_exists", {
        email : $("#contact_person_email").val()
    }).then(function(data) {
        return parseInt(data, 10) != 1;
    });  // end of post 
} //end function 

使用法:

check_validity().done(function(valid) {
    if (valid) {
        // ...
    }
});

ただし、それを使用して戻るか、trueまたはに戻るかを決定することはできません。非同期呼び出しは不可能です。falsesubmit()

于 2013-06-27T01:50:34.713 に答える