鍍金池/ 問答/HTML/ console.log(a) 里面有status這個值,為什么console.l

console.log(a) 里面有status這個值,為什么console.log(a.status)是undefined?

console.log(a); 里面有status這個值,為什么console.log(a.status)是undefined呢;
里面的這些值、方法要如何訪問?
clipboard.png


<!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中里面的數(shù)據(jù)呢
                console.log(a.status);
                return a.status;
            }
        }
     })
</script>
</body>
</html>
回答
編輯回答
艷骨

state是個function

2017年9月29日 01:19
編輯回答
乞許

大概是因為a是通過ajax異步獲取的

2018年6月27日 03:24
編輯回答
不舍棄

好像是因為異步取值, console.log的時候數(shù)據(jù)還不存在, 你試試 if(a.status !=== undefined) { console.log(a.status) }可不可以

2018年6月11日 05:26
編輯回答
巷尾

的確是因為異步造成的。你執(zhí)行console.log()方法的時候,ajax還沒有成功返回.所以是undefined,至于為什么你控制臺展開能看到status為200,其實很簡單。chrome控制臺顯示的a是一個指針,當(dāng)你展開時,它才取訪問它的值。而當(dāng)你點擊展開時,ajax早已經(jīng)成功返回了。
你看,當(dāng)你打印時,狀態(tài)還是1,
clipboard.png
當(dāng)你點擊展開后,狀態(tài)為4,說明AJAX已執(zhí)行成功

clipboard.png

2018年4月16日 07:49
編輯回答
敢試

這樣是可以的:

                a.done(() => {
                    console.log(a.status);//200
                    console.log(a);//a.readystate===4;
                });

這個原因就很明顯了,你直接訪問的話,瀏覽器還未或正在發(fā)送 xhr 請求,請求還沒有完成,自然是訪問不到 a.status 的,要訪問需要在請求完成后訪問才行,jq 的 ajax.done(fn) 就是在請求完成且成功時才去執(zhí)行 fn 的這個時候才能訪問到數(shù)據(jù);

如果是原生js就是要監(jiān)聽 onreadystatechange 事件,當(dāng) readystate 由 1到4時,請求才完成,這個時候才能訪問到 a.status,雖然這個時間很短,但是你直接在請求的代碼后面訪問肯定是不行的,jq 的 .done 然后就相當(dāng)于在請求完成后且成功時才調(diào)用里面的回調(diào),原理是一樣的;

你看截圖:
最初直接訪問 a ,readystate 為 1;

clipboard.png

請求成功后訪問 a ,readystate 為 4;

clipboard.png

2017年5月6日 08:27