jQuery ajax方法实际上是"返回"如果它在完整的功能?

时间:2015-06-04 18:04:20

标签: javascript jquery ajax

我确实找到了我的问题,但我认为在ajax函数中,当complete函数运行时,你内部有return VARIABLE时,它应该返回该值。

示例:

错误

var result = doStuff();
console.log('return from function doStuff(): ---' + result);

function doStuff() {
    $.ajax({
        ....
        ....
        complete: function (data) {
            // this will return true or false, boolean
            // in my instance, I'm returning false from the api controller
            var testing = $.parseJSON(data.responseText);
            console.log('return from api controller: ---' + testing );
            return testing;
        },
        error: function (response) {
            console.log(response.responseText);
        }
    });

    return true;  // this is obviously being returned, not the one above
}

我认为 console.log对于变量的值会有 false 。由于complete函数具有返回值,因此它永远不会达到最低回报。

enter image description here

显然情况并非如此。为什么不呢?

相反,如果我声明变量var testing = true;,然后在complete函数中再次设置该值,并返回该值,它可以正常工作。但这仍然无法解释为什么上述情况无法正常工作(或按照我的想法行事)。

从右

var result = doStuff();
console.log('return from function doStuff(): ---' + result);

function doStuff() {
    var testing = true;
    $.ajax({
        ....
        ....
        complete: function (data) {
            // this will return true or false, boolean
            // in my instance, I'm returning false from the api controller
            testing = $.parseJSON(data.responseText);
            console.log('return from api controller: ---' + testing );

            // removed the "return" since the bottom is being hit
        },
        error: function (response) {
            console.log(response.responseText);
        }
    });

    return testing;
}

enter image description here

修改

为了澄清,我的ajax功能正在使用async: false

$.ajax({
     ....
     async: false,
     ... other stuff
});

1 个答案:

答案 0 :(得分:1)

返回值;它必须,这就是JS的工作方式。

你感到困惑的是,它不是你的代码调用complete函数,所以没有得到返回 - 调用的代码它确实(在这种情况下是jQuery)。

您的第二个示例依赖于同步Ajax调用(使其成为Jax调用),代码应该反映您正在进行同步调用,否则它将无法以您期望的方式运行(并混淆问题读者)。