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

jquery ajax成功响应后无法赋值给全局变量

程序员文章站 2022-03-09 21:51:56
...

在写前端页面的时候遇到一个ajax的问题。感觉倒像是逻辑不对,不过遇到了,总要撸一下。

<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
    test();
    var message;
    function test(){
        $.ajax({
            dataType: 'json',
            type:'post',
            url:"自己的url",
            success: function(json){
                console.log(json);//结果是有的
                if(true){
                    message = json;
                }else{
                    alert("错误");
                }
            },
            error:function(){
                alert("网络异常,请稍后重试.");
            }
        })
        console.log(message);//这里却是 undefined
    }
    </script>

上面的代码自己感觉没啥难度。 ajax异步加载数据。 但是在响应成功之后给全局变量赋值,是不成功的。刚遇到,感觉很奇怪。后来百度了,知道ajax异步加载数据,执行顺序的问题。ajax的异步响应是在最后才返回的,所以打印时,还没响应,因此赋值也是失败的。
但有时候有些业务必须这么做,所以就换个蹩脚的方法:

<script type="text/javascript">
    test();
    var message;
    function test(){
        $.ajax({
            dataType: 'json',
            type:'post',
            url:"自己的url",
            success: function(json){
                console.log(json);//结果是有的
                if(true){
                    window.sessionStorage.setItem("test", JSON.stringify(json));
                }else{
                    alert("错误");
                }
            },
            error:function(){
                alert("网络异常,请稍后重试.");
            }
        })
         message = JSON.parse(window.sessionStorage.getItem("test"));
         console.log(message);//这里有值
    }
    </script>

这里是把返回的数据写入到浏览器的sessionStorage里。然后再取出来。
还有个方法就是把异步的ajax设置为同步:async:true 。这样就可以按照正常的执行顺序,随便赋值了。不过jquery不建议用同步。所以会报一个大黄色的警告链接。好烦的。

每次写完都感觉为啥差距这么大,难道真是天赋原因,让我感觉自己写的代码都那么垃圾。