因为前一段负责优化公司的js代码,其中有一些的代码涉及到js文件跨文件调用,当时遇到一个问题跨文件调用其他js文件的ajax时,取到的ajax返回值一直是undefined经过多方查证终于找到原因了,特此记录一下。
1.作用域问题
function checkAccount() {
var url = window.location.pathname;
var data = {};
data['Check'] = 1;
$.ajax({
url: url,
type: "POST",
data: data,
async: false
}).done(function (responseData) {
if (responseData == "true") {
requst = true;
} else {
requst = false;
}
})
return requst;
}
因为js中每个函数都会有作用域,而done\suces函数是请求成功时才会执行,也就是说不是每一次都可以执行的,所以产生了跨作用域的问题,导致上层函数无法判断是否为该函数的返回值,所以返回了 undefined 。但如果是 写在complete函数 (请求完成时回调)此时无论成功与否,均会执行该return语句。
2.同步异步问题
因为async异步设置默认为true,所以done函数中的代码是有可能后执行,所以此时函数还没返回,调用checkAccount()函数的主线程可能就开始执行了,所以致使return语句失去了意义。