1

Ajax を使用する jQuery 関数があります。それは常に戻ってきて、そのundefined理由を理解できます。

関数に登録されている変数を警告すると$.post機能しますが、外部で試してみると機能しません。

function signup(){

    var username = $('#su-username').val();
    var password = $('#su-password').val();

    if(username!='' && password!=''){

        $.post("register.php", { user: username, pass: password }).done(function(response){

            if($.trim(response)=='1'){
                alert('Username Taken, Please choose another');
                var registered = 0;
            }else{
                var registered = 1;
            }

        });

    } else {

        alert('Username and password cannot be empty');
        var registered = 0;
    }
    return registered;
}
4

2 に答える 2

3

AJAX のような非同期操作を扱う場合は、コールバック関数を使用することをお勧めします。例えば:

function signup(callback) {

    var username = $('#su-username').val(),
        password = $('#su-password').val(),
        registered = 0;

    if (username != '' && password != '') {

        $.post("register.php", { user: username, pass: password }).done(function(response) {
            if ($.trim(response) == '1') {
                alert('Username Taken, Please choose another');
            }
            else {
                registered = 1;
            }

            // Delayed callback invocation after AJAX request
            callback(registered);
        });
    }
    else {
        alert('Username and password cannot be empty');
        callback(registered); // Immediate invocation of the callback function
    }
}

signup(function(ok) {
    if (ok) alert('Ok!');
    else alert('Not ok!');
});
于 2013-07-06T19:17:24.670 に答える
2

コードの実行が完了する前に変数を警告しています。値が返されたときに使用できる AJAX 呼び出しの代わりに、on success 関数を使用します。

現時点では、AJAX 呼び出しが完了するのを待っていません。コードを続行しているため、未定義になっています。

于 2013-07-06T19:11:26.417 に答える