我遇到了让这个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 ...不确定发生了什么。
答案 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);
};
应该照顾它。