为了账号安全,请及时绑定邮箱和手机立即绑定

console.log(a) 里面有status这个值,为什么console.log

console.log(a) 里面有status这个值,为什么console.log

jeck猫 2019-02-05 14:19:46
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>
查看完整描述

4 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

这样是可以的:


                a.done(() => {

                    console.log(a.status);//200

                    console.log(a);//a.readystate===4;

                });

这个原因就很明显了,你直接访问的话,浏览器还未或正在发送 xhr 请求,请求还没有完成,自然是访问不到 a.status 的,要访问需要在请求完成后访问才行,jq 的 ajax.done(fn) 就是在请求完成且成功时才去执行 fn 的这个时候才能访问到数据;


如果是原生js就是要监听 onreadystatechange 事件,当 readystate 由 1到4时,请求才完成,这个时候才能访问到 a.status,虽然这个时间很短,但是你直接在请求的代码后面访问肯定是不行的,jq 的 .done 然后就相当于在请求完成后且成功时才调用里面的回调,原理是一样的;


你看截图:

最初直接访问 a ,readystate 为 1;


https://img1.sycdn.imooc.com//5c87599a0001fad102950097.jpg


请求成功后访问 a ,readystate 为 4;

https://img1.sycdn.imooc.com//5c87599c0001a93e06080153.jpg


查看完整回答
反对 回复 2019-03-12
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

的确是因为异步造成的。你执行console.log()方法的时候,ajax还没有成功返回.所以是undefined,至于为什么你控制台展开能看到status为200,其实很简单。chrome控制台显示的a是一个指针,当你展开时,它才取访问它的值。而当你点击展开时,ajax早已经成功返回了。 
你看,当你打印时,状态还是1,
https://img1.sycdn.imooc.com//5c8759a900014d7b01510016.jpg

当你点击展开后,状态为4,说明AJAX已执行成功

https://img1.sycdn.imooc.com//5c8759ab0001bf8a02660181.jpg


查看完整回答
反对 回复 2019-03-12
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

state是个function


查看完整回答
反对 回复 2019-03-12
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

好像是因为异步取值, console.log的时候数据还不存在, 你试试 if(a.status !=== undefined) { console.log(a.status) }可不可以


查看完整回答
反对 回复 2019-03-12
  • 4 回答
  • 0 关注
  • 1131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号