JQuery Ajax 回调函数为全局变量赋值
程序员文章站
2024-01-23 18:08:28
...
背景 |
如题,在使用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 的意义。
推荐阅读
-
JQuery Ajax 回调函数为全局变量赋值
-
Jquery版本导致Ajax不执行success回调函数
-
jQuery实现ajax回调函数带入参数的方法示例
-
ajax异步回调函数中给外部变量赋值的问题探讨
-
jQuery下Ajax 执行回调函数的原理success、error、complete
-
jQuery.Ajax回调函数success返回字符串中文乱码问题
-
Ajax获取回调函数无法赋值给全局变量的问题
-
Jquery版本导致Ajax不执行success回调函数
-
jquery ajax的success回调函数中实现按钮置灰倒计时
-
jQuery Ajax.BeginForm方法回调函数高版本3.3.1不兼容问题