欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于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);

运行结果如下
关于Ajax回调函数内返回值无法给全局变量赋值的问题
关于Ajax回调函数内返回值无法给全局变量赋值的问题
在回调函数内部可以获得返回的集合给全局变量赋值,但是在外部全局变量值仍为初始时的[ ]。

造成这种现象的原因是赋值方式的问题,在回调函数内不能直接等号赋值,要用循环将值返回集合的每一个值用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);

执行结果:
关于Ajax回调函数内返回值无法给全局变量赋值的问题
关于Ajax回调函数内返回值无法给全局变量赋值的问题
这样回调函数内赋值成功了,外部也可以获得赋给全局变量的回调值。

--------------分割线---------------------
记录一下这个小问题,提醒自己以后别忘了- 。-