2016-02-05 72 views
1

之前變量我有這樣的代碼:如何定義AJAX調用

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 ... WHy?

+0

您正在訂購比薩餅,然後嘗試在它交付之前將其吃掉! Ajax是一個異步調用,在最後一個'console.log'執行後,'success'會被調用回去。 –

+0

如何解決? – MonkeyBusiness

+0

只使用數據*裏面的*回調(或使用承諾)。問題是「接下來你想怎麼處理數據?」 –

回答

2

您正在訂購比薩餅,然後嘗試在它交付之前將其吃掉! Ajax是一個異步調用,並且success在最後執行console.log後得到回調。

您只需要在回調中使用異步數據。

另一種方法是使用由阿賈克斯返回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 
}); 

承諾讓功能重用。