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

各种报错 同时被 3 个专栏收录
16 篇文章 0 订阅
26 篇文章 0 订阅
33 篇文章 0 订阅

在写前端页面的时候遇到一个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不建议用同步。所以会报一个大黄色的警告链接。好烦的。

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

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值