解决使用Ajax方法时,无法将回调的数据存储到全局变量中使用

我们使用$.ajax时,有时候会需要把从后台获取到的数据存储在全局变量中,方便以后进行调用。

 
例如:
        var i=0;
        $(function () {
            $.ajax({
                url: "/web/home/GetMenusList",
                type: "POST",
                success: function (data) {  //例如data为1
                    i=data
                   }
            });
         console.info(i);
        });

这时候打印出来的数据其实还是0,那么这明显不符合我们需求,要解决这个问题首先我们要看一下Ajax同步和异步的功能区别

ajax请求(async:false|true)加载同步与异步的功能区别
1、异步情况:ajax单独开启一个请求,ajax请求未完成即window._code未被赋值时,外部先调用window._code,因为值为空undefined;
2、同步情况:ajax请求完成后(success或error等),window._code被赋值,后续外部操作才可以调用。

由此可以得出结论,如果我们要实现文章开头的需求,需要将Ajax的异步关闭,调用方法async: false

        
例如:
        var i=0;
        $(function () {
            $.ajax({
                url: "/web/home/GetMenusList",
                type: "POST",
                async: false,//关闭异步加载
                success: function (data) {  //例如data为1
                    i=data
                   }
            });
         console.info(i);
        });

这时候打印出来的i值就是1了

 

注:使用Ajax进行动态添加HTML元素内容,如果添加的元素中包含绑定的事件,在使用append时必须使用Ajax的同步加载功能,如无绑定事件,则使用异步加载即可

THE END