2012-03-11 22 views
3

可能重複:
jQuery: Return data after ajax call successAjax調用返回不正確的變量

我在與獲得這個AJAX功能的問題而努力,不知道在那裏我搞亂了。

var getTotalEntries = function(query) { 
    var total; 
    $.ajax({ 
    url: url, 
    data: query, 
    dataType: 'jsonp', 
    success: function(data) { 
     console.log(data.total); 
     total = data.total; 
    } 
    }); 

    return total;  
}; 

這將65記錄到控制檯,但返回undefined ...不知道發生了什麼。

+7

Ajax中的* A *代表** asynchronous **。如果你只能從該函數返回值,爲什麼你必須通過一個'成功'*回調*? – 2012-03-11 23:58:00

回答

5

ajax調用和你的return語句是異步的,而不是同步的,所以你的return語句在ajax調用返回並設置變量之前觸發。

解決此問題的一種方法是執行您想要使用成功回調中的數據執行的任何操作。

$.ajax({ 
    url: url, 
    data: query, 
    dataType: 'jsonp', 
    success: function(data) { 
     console.log(data.total); 
     total = data.total; 

     // do stuff with total here, or invoke function that uses total 
     doSomething(total); 
    } 
}); 
1

Ajax是異步的。所以執行過程不會等待返回值。你可以做這樣的事情:

​​

代碼的處理方法來處理總:

var processReturn = function(total) { 
    //use the total value here  
    console.log(total); 
}; 

這應該照顧它。