定义一个方法,返回ajax的返回值,这么写有什么问题?

javascriptfunctionaa(){
varresult=[];
$.getJSON('js/json.json',function(data){
result=data;
});
returnresult;
}
varbb=aa();
console.log(bb);//这里返回[],而不是data的值
HUX布斯
浏览 337回答 2
2回答

智慧大石

ajax是异步的,所以aa()在执行的时候,return的那个result本身就是空的,在此后的某些秒以后,result才会有赋值。改写可以用callback形式,或者用promise等等javascriptfunctionaa(callback){varresult=[];$.getJSON('js/json.json',function(data){result=data;callback(result);});}aa(function(bb){console.log(bb);//这里返回是data的值})

Helenr

$.getJSON是$.ajax的简写形式,默认是异步,当ajax发送请求时后面的return语句会继续执行,不会等待ajax返回数据才继续执行后面的语句,所以这里要把ajax请求设置为同步的,建议使用$.ajaxfunctionaa(){varresult=[];$.ajax({url:'js/json.json',async:false,success:function(data){result=data;}});returnresult;}varbb=aa();console.log(bb);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript