$.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'
    });
}