【问题标题】:Get a variable after ajax doneajax完成后获取变量
【发布时间】:2011-09-08 13:54:20
【问题描述】:

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

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);

在控制台:

未定义

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

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    默认情况下,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()

    【讨论】:

      【解决方案2】:

      请参阅Waiting for $.post to finish

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-06
          • 1970-01-01
          • 2013-01-25
          • 1970-01-01
          • 2021-03-13
          • 2011-08-19
          • 1970-01-01
          相关资源
          最近更新 更多