如何在ajax调用之前定义变量

时间:2016-02-05 14:22:19

标签: javascript jquery ajax variables

我有这段代码:

function aaa (){
    var db_data;
    $.ajax({
        url: "http://localhost:8888/aaa/{{$article->id}}", 
        type: "GET",
        async: true, 
        dataType: "json",
        success: function(data) {
            db_data = data;
            console.log(db_data);
        }, 
        error: function (data) {
            console.log(data);
            console.log('GRESKA NEKA');
        }      
    });
    console.log(db_data);
};

然后我至少得到了行console.log(aaa) - >未定义...

为什么呢?第一个console.log工作正常,但在ajax之外我无法得到db_data ...为什么?

1 个答案:

答案 0 :(得分:2)

您正在订购披萨,然后在送货前尝试吃它! Ajax是一个异步调用,success在最后console.log执行后很久才被调用。

您需要在回调中使用异步数据。

另一种方法是使用Ajax返回的promise,这样你的代码就变成了一个函数,它承诺返回数据":

// Return the Ajax promise
function aaa() {
  return $.ajax({
    url: "http://localhost:8888/aaa/{{$article->id}}",
    type: "GET",
    async: true,
    dataType: "json",
  });
}

// and use like this

aaa().then(function(data){ 
   // Do something with the data
}).fail(function(data){ 
   // Do something with the data when it fails
});

Promise使函数可重用。