主要问题有两个:
1、通过get调用Ajax得到的值returnData如何返回给foo( )?
2、在onclick执行后如何将返回值returnData赋给最外层的returnData
//把我遇到的问题简化抽象出来是这样的:
(function(){
var returnData;
for(var i=0; i<length; i++){
element.onclick = helper(i);
}
function helper(i){
return function(){
returnData = foo(i);
}
}
function foo(x){
var returnData;
//get函数是Ajax get方法的封装
get(url, {}, function(text){
returnData = text + x;
});
return returnData;
}
})();
只回答第一个: 无解,你的打开方式不对。
看来你还是再用同步的思维在思考问题,但说到ajax,就不得不切换到异步的思维。
是否想过: ajax为什么要使用回调函数?
因为网络是有时延的,等待请求意味着阻塞,这可不行。因此ajax调用后函数就立即返回。但这样一来数据就取不到了——因为你不知什么时候数据会来。既然不能主动拿到数据,我们可以换一种方法,即将处理数据的操作传入——这便是回调。
而作为返回值返回,这是同步操作才有的特性,在此做不到。
解决方案:
使用回调
使用 Promise
尝鲜 ES 7 新特性 async