完成ajax后得到一个变量

时间:2011-06-05 00:52:44

标签: javascript jquery ajax

我有这个代码向我的服务器发出一些请求:

function myAjaxCheck(token) {
        $.ajax({
            type: 'POST',
            url: 'auth.php',
            data: {
                token: token,
            },
            dataType: 'json',
            success: function (data) {
                if (data.auth == 'OK') {
                    alert ('ok');
                    }
                } else {
                    alert('Error: ' + data.auth);
                }
            }
        }).done(function (data) {
            return data;
        });
    }

所以,我需要将返回的数据传递给变量,如:

Var MyVariable = myAjaxCheck(token);
console.log(MyVariable);

在控制台:

未定义

问题在哪里,应该在完成后返回数据,但不是。

3 个答案:

答案 0 :(得分:8)

默认情况下,ajax()请求是异步的,因此对ajax()的调用通常会在请求完成之前返回。您可以使用回调函数。

function myAjaxCheck(token, callback) {
        $.ajax({
            type: 'POST',
            url: 'auth.php',
            data: {
                token: token,
            },
            dataType: 'json',
            success: function (data) {
                if (data.auth == 'OK') {
                    alert ('ok');
                    }
                } else {
                    alert('Error: ' + data.auth);
                }

                callback(data);
            }
        });
    }

var myVariable; 
 myAajxCheck(token, function(returnedData){ //anonymous callback function
    myVariable = returnedData;
    console.log(myVariable);
 });

如果您绝对必须,可以使用async: false inside the call to ajax()

答案 1 :(得分:0)

请参阅Waiting for $.post to finish

基本上,使用回调会更好。您的变量似乎是undefined,因为将其返回到控制台的代码在AJAX请求完成之前执行

答案 2 :(得分:0)

因为您希望立即返回一个值。您正在使用异步XHR,因此,在XHR有机会完成并返回其值之前,该函数将返回(在这种情况下为undefined)。