$.when() 不等待 ajax 响应
$.when() not waiting for ajax response
我有一个问题,如果我调用包含 Ajax 调用和 return 这些调用结果的函数,调用者总是在 [=17 之前收到一个空 return 值=] 通话已 returned.
示例 fiddle: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;
}
});
}
您必须 return $.ajax
给出的延迟:
function fun() {
return $.ajax({//this ajax call should return an ip
来自the documentation解释你的回调被执行的原因:
If a single argument is passed to jQuery.when() and it is not a
Deferred or a Promise, it will be treated as a resolved Deferred and
any doneCallbacks attached will be executed immediately
您的代码中还有另一个问题:您在异步调用完成之前发出警报。您应该在回调中移动 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'
});
}
我有一个问题,如果我调用包含 Ajax 调用和 return 这些调用结果的函数,调用者总是在 [=17 之前收到一个空 return 值=] 通话已 returned.
示例 fiddle: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;
}
});
}
您必须 return $.ajax
给出的延迟:
function fun() {
return $.ajax({//this ajax call should return an ip
来自the documentation解释你的回调被执行的原因:
If a single argument is passed to jQuery.when() and it is not a Deferred or a Promise, it will be treated as a resolved Deferred and any doneCallbacks attached will be executed immediately
您的代码中还有另一个问题:您在异步调用完成之前发出警报。您应该在回调中移动 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'
});
}