关于Ajax回调函数内返回值无法给全局变量赋值的问题
程序员文章站
2022-03-09 21:50:50
...
众所周知,Ajax从后端获得数据到回调函数,想要将获取的值赋给全局变量的话要将Ajax中的async改为false,使其同步,不然js在按顺序执行时等请求发出后就先去执行Ajax下面的代码了。
var data = CommonUtil.paramsUtil.getDataLoginId();
CommonUtil.ajax({
url: "/ChartController/searchLineChartParameterForBasic",
data: data,
async: false,
callback: function (response) {}});
但是有时候这样设置后仍然无法给全局变量赋值比如下列情况:
var paperXaxis = [];
var paperData = [];
function getLineChartData() {
var data = CommonUtil.paramsUtil.getDataLoginId();
CommonUtil.ajax({
url: "/ChartController/searchLineChartParameterForBasic",
data: data,
async: false,
callback: function (response) {
paperXaxis = response["paperTimeList"];
console.log(paperXaxis);
paperData = response["paperSumList"];
console.log(paperData);
}
});
}
console.log(paperXaxis);
console.log(paperData);
运行结果如下
在回调函数内部可以获得返回的集合给全局变量赋值,但是在外部全局变量值仍为初始时的[ ]。
造成这种现象的原因是赋值方式的问题,在回调函数内不能直接等号赋值,要用循环将值返回集合的每一个值用push方法放入定义的全局变量中,这样外部就可以使用。
var paperXaxis = [];
var paperData = [];
function getLineChartData() {
var data = CommonUtil.paramsUtil.getDataLoginId();
CommonUtil.ajax({
url: "/ChartController/searchLineChartParameterForBasic",
data: data,
async: false,
callback: function (response) {
var i = 0;
for (i in response["paperTimeList"]) {
paperXaxis.push(response["paperTimeList"][i])
}
console.log(paperXaxis);
for (i in response["paperSumList"]) {
paperData.push(response["paperSumList"][i])
}
console.log(paperData);
}
});
}
console.log(paperXaxis);
console.log(paperData);
执行结果:
这样回调函数内赋值成功了,外部也可以获得赋给全局变量的回调值。
--------------分割线---------------------
记录一下这个小问题,提醒自己以后别忘了- 。-