我确实找到了我的问题,但我认为在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
函数具有返回值,因此它永远不会达到最低回报。
显然情况并非如此。为什么不呢?
相反,如果我声明变量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;
}
修改:
为了澄清,我的ajax功能正在使用async: false
$.ajax({
....
async: false,
... other stuff
});
答案 0 :(得分:1)
返回值;它必须,这就是JS的工作方式。
你感到困惑的是,它不是你的代码调用complete
函数,所以你没有得到返回 - 调用的代码它确实(在这种情况下是jQuery)。
您的第二个示例依赖于同步Ajax调用(使其成为Jax调用),代码应该反映您正在进行同步调用,否则它将无法以您期望的方式运行(并混淆问题读者)。