javascript - 關(guān)于ajax異步加載請(qǐng)問(wèn)數(shù)據(jù)延遲問(wèn)題
問(wèn)題描述
在外面定義一個(gè)空數(shù)組,然后做一個(gè)ajax請(qǐng)求,請(qǐng)求內(nèi)再嵌套一個(gè)請(qǐng)求,最終拼接成一個(gè)三個(gè)對(duì)象插入空數(shù)組。然后我在最外面打印數(shù)組長(zhǎng)度,打印出來(lái)的長(zhǎng)度是0,這個(gè)問(wèn)題會(huì)影響賦值。請(qǐng)問(wèn)怎么解決。
問(wèn)題解答
回答1:ajax異步會(huì)造成這樣的問(wèn)題。解決方案1.Promise 2.在ajax回調(diào)中進(jìn)行賦值
回答2:
ajax 是異步的,當(dāng)執(zhí)行到你的 log 代碼時(shí),ajax 還沒(méi)有返回呢。
回答3:請(qǐng)查閱事件循環(huán)的問(wèn)題
我們知道ajax是異步操作,
你console.log 的位置 此時(shí)arr.length 其實(shí)就是[].length
當(dāng)你當(dāng)前的js執(zhí)行完后,ajax的success回調(diào)才會(huì)執(zhí)行,只有success回調(diào)成功后此時(shí)你的arr數(shù)組被push進(jìn)值
所以你可能要把console.log放入第二個(gè)ajax的success回調(diào)里至于promise會(huì)很好的優(yōu)化這種嵌套的回調(diào),但是你要封裝你的ajax
建議把你所有的ajax 包裝成promise
回答4:ajax是數(shù)據(jù)獲取方式是異步的,所以異步獲取的數(shù)據(jù)并不能按照平時(shí)理解的同步方式去處理,應(yīng)該把你的console.log 寫(xiě)在 success 的 回調(diào)函數(shù)里。
回答5:將你的async:false,這樣你就可以在外面獲取到里面的值了。
回答6:這樣的話,你得改成ajax同步。異步的話,ajax和它后面的代碼同時(shí)執(zhí)行
相關(guān)文章:
1. javascript - sublime快鍵鍵問(wèn)題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問(wèn)?4. css - 寫(xiě)頁(yè)面遇到個(gè)布局問(wèn)題,求大佬們幫解答,在線等,急!~5. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?6. phpstudy8.1支持win11系統(tǒng)嗎?7. 實(shí)現(xiàn)bing搜索工具urlAPI提交8. 配置Apache時(shí),添加對(duì)PHP的支持時(shí)語(yǔ)法錯(cuò)誤9. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問(wèn)10. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽(tīng)數(shù)據(jù)變化

網(wǎng)公網(wǎng)安備