关于javascript:Ajax调用没有返回正确的变量

Ajax call not returning correct variable

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
jQuery: Return data after ajax call success

我有一个问题,让这个ajax功能工作,不知道我搞砸了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 ...不确定发生了什么。


ajax调用和return语句是异步的,而不是同步的,所以你的return语句在ajax调用返回之前触发并设置变量。

处理此问题的一种方法是使用成功回调内的数据执行您要执行的任何操作。

1
2
3
4
5
6
7
8
9
10
11
12
$.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);
    }
});

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;    
};

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

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

那应该照顾它。