带有返回未定义Ajax的jQuery函数

带有返回未定义Ajax的jQuery函数,jquery,ajax,post,undefined,Jquery,Ajax,Post,Undefined,我有一个使用Ajax的jQuery函数。它总是返回未定义的,我可以找出原因 我注意到,如果我提醒在$.post函数中注册的变量,它会工作,但如果我在外部尝试它,它不会工作 function signup(){ var username = $('#su-username').val(); var password = $('#su-password').val(); if(username!='' && password!=''){

我有一个使用Ajax的jQuery函数。它总是返回未定义的,我可以找出原因

我注意到,如果我提醒在$.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;
}

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


目前,您不是在等待AJAX调用完成,而是在继续您的代码,这就是为什么您没有定义代码的原因。

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


目前,您并不是在等待AJAX调用完成,而是在继续编写代码,这就是为什么在处理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!');
});

在处理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!');
});

这不可能是真的,因为如果我试图注册一个已经被占用的用户名,我会收到“用户名被占用,请选择另一个”的警告;哪个与设置注册变量的if块在同一个if块中?好了,你需要在从AJAX调用接收到值后处理代码,请参阅@dfsq answer以获得一个好方法。这不可能是真的,因为如果我尝试注册一个已经使用的用户名,我会收到警告“Username take,请选择另一个”;哪个if块与设置注册变量的if块位于同一个if块中?好了,您需要在从AJAX调用接收到值后处理代码,请参阅@dfsq answer以获得一个好方法。