2012-03-11 49 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); 
}; 

这应该照顾它。