如题,在使用Echarts的地图时,需要为图表填充数据。但是如果写在success的回调函数中,代码很长并且有大量重复,显然不是正确的打开方式。因此定义了一个外部变量,使用Ajax请求数据,然后在success中为变量赋值。
var result;$.ajax({ url:'getDeclareInfo.json', type:'POST', data : {'strCondition' : condition}, success:function(data){ result = data; }});
但是运行结果和我预想中的并不一样,浏览器提示 result is undefined,data的值没有赋给result。后来发现因为发送的是异步请求,浏览器不会等待请求结果,而是顺序执行JS,所以当执行到使用result时会提示 result is undefined。
async
类型:Boolean
默认值: true。默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。
注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
可以有两种解决方案:
在 success 回调函数中添加显示地图方法,这样代码会很长,并且大部分重复,不利于后期的维护和拓展。
设置 async 为 false,发送同步请求,可以实现全局变量的赋值。不过这样也就失去了使用 Ajax 的意义。