我遇到一个问题,如果我调用包含Ajax调用的函数并返回这些调用的结果,调用者总是会在Ajax调用返回之前收到空返回值。
示例小提琴:ajax null return value example
var returnVal;
$.when(fun()).done(function(a1)
{
console.log("finished ajax");
returnVal = a1;
});
alert(returnVal);
function fun() {
$.ajax({//this ajax call should return an ip
url: 'http://ip.jsontest.com/',
data: "",
dataType: 'json',
success: function (data) {
console.log("fun(id) ajax success");
return data;
}
});
}
答案 0 :(得分:8)
您必须返回$.ajax
给出的延期:
function fun() {
return $.ajax({//this ajax call should return an ip
从the documentation解释执行回调的原因:
如果将单个参数传递给jQuery.when()并且它不是 延期或承诺,它将被视为已解决的延期和 附加的任何doneCallbacks将立即执行
您的代码中还有另一个问题:您在异步调用完成之前会发出警报。您应该在回调中移动alert
。
并且没有理由拥有成功功能,您可以在done
回调中处理结果。
你不能真正alert
一个对象并获得有意义的东西。您应该alert(JSON.stringify(returnVal))
或使用console.log
(不要太痛苦,点击F12来显示控制台)。
$.when(fun()).done(function(a1){
console.log("finished ajax");
var returnVal = a1;
console.log(returnVal);
});
function fun() {
return $.ajax({//this ajax call should return an ip
url: 'http://ip.jsontest.com/',
data: "",
dataType: 'json'
});
}