Ajax调用没有返回正确的变量

时间:2012-03-11 23:54:03

标签: javascript jquery ajax

  

可能重复:
  jQuery: Return data after ajax call success

我遇到了让这个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 ...不确定发生了什么。

2 个答案:

答案 0 :(得分: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 :(得分:1)

Ajax是异步的。因此,执行继续而不等待返回值。你可以这样做:

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

      //pass the total value here
      processReturn(total);
    },
    //you may want to add a error block
    error: function(e, xhr, settings, exception){

    }
  });

  return total;     
};   

编码处理总数的处理方法:

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

应该照顾它。