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

时间:2021-03-28 10:29:36

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

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