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

在代码完成运行之前,您正在警告变量。使用 on success 函数代替 AJAX 调用,当返回值时,您可以使用它。

目前,您不是在等待 AJAX 调用完成,而是在继续您的代码,这就是您变得未定义的原因

于 2013-07-06T19:11:26.417 回答