Ajax回調數據賦值給變量的問題


寫這篇文章是因為我上面Ztree的文章引發的我對js的研究,不明白的可以先看看上面Ztree的返回數據那塊,因為是同一個小例子,上篇是所有的代碼,上圖:

我聲明全局變量tree,在Success回調函數里把回調的數據賦值給變量,我當時想着根據編程習慣做法也都是這,但是問題出現了,我先簡單說下Console.info這個方法是在控制台打印數據,因為alert返回數據的時候如果是json一些數據的時候,你是alert不出來實際數據的,這個方法是試用火狐的,IE是不行的好像,這個不討論這個,火狐上裝的是Firebug插件,打印的結果是,如圖:

打印的結果是沒有的,接着我按下面這種方法如下圖 ,也就是我把打印放在回調函數里是可以打印出來數據的,

這時候我疑問的是為什么回調過來的數據不能賦值給全局變量,緊接着我看了Jquery 的API,發現了同步的方法,也就是如下圖:

async: false在ajax里加上是可以的,當然除了這個方法之外還可以把$.fn.zTree.init($("#treeDemo"), setting, tree);這段代碼寫在回調函數里也是可以實現樹形菜單的,但是我還是糾結為什么回調的數據部能賦值給變量,接下來我有做了另一個實驗,如下圖:

我在回調里面打印了下,又在外面打印了下,結果如下圖:

先打印出來的是下面的,問題比較明了了,雖然我先寫的ajax但是還是先執行的下面的代碼,所以那個變量tree是打印不出來的,而在回調里面的是后來賦值的所以能打印出來,總結下那就是按照我一開始的寫法異步請求不能將返回值傳給全局變量的,因為JS只管執行當前代碼,順序執行。發送請求了,那是請求響應的事,它不管這些,只管繼續執行在它面前的代碼,所以是得不到變量賦值的,要想傳給變量可以使用同步也就是async: false,但是同步是要同步請求將鎖住瀏覽器,用戶其它操作必須等待請求完成才可以執行。如果想要賦值給Ztree的樹形菜單數據的話,我最后還是選擇了在回調函數里進行初始化,大家可以看看Ztree那篇的代碼,好了,結束。

第一次比較正式的寫技術文章盡量寫的詳細些,之前一直學習研究東西也沒倒上寫。以后時間允許的話我會盡量把之前的總結給大家,比較技術是交流和共享的,希望大家都明白,不管事技術好的還是剛入門的都可以看懂,希望對需要的朋友一點幫助。有什么問題可以反饋給我,我會及時的給你們答復。QQ571001325


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM