console.log(a); 里面有status这个值,为什么console.log(a.status)是undefined呢;
里面的这些值、方法要如何访问?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/vue/2.5.3/vue.js"></script>
</head>
<body>
<div id="app">
{{value}}
</div>
<script type="text/javascript">
new Vue({
el:"#app",
data:{},
computed:{
value:function(){
var url="https://easy-mock.com/mock/5a61abf341d8910ea886ec50/searchLists";
var a= $.get(url,{},function(result){
return result;
})
console.log(a); //打印出来变量a中有status这个值,为什么a.status是undefined,要如何访问里面a中里面的数据呢
console.log(a.status);
return a.status;
}
}
})
</script>
</body>
</html>
这样是可以的:
这个原因就很明显了,你直接访问的话,浏览器还未或正在发送 xhr 请求,请求还没有完成,自然是访问不到 a.status 的,要访问需要在请求完成后访问才行,jq 的 ajax.done(fn) 就是在请求完成且成功时才去执行 fn 的这个时候才能访问到数据;
如果是原生js就是要监听 onreadystatechange 事件,当 readystate 由 1到4时,请求才完成,这个时候才能访问到 a.status,虽然这个时间很短,但是你直接在请求的代码后面访问肯定是不行的,jq 的 .done 然后就相当于在请求完成后且成功时才调用里面的回调,原理是一样的;
你看截图:
最初直接访问 a ,readystate 为 1;
请求成功后访问 a ,readystate 为 4;