Re: [問題] JQuery 等待事件完成

看板Ajax作者 (葉酸酸)時間14年前 (2011/09/07 23:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
剛好趁這個範例練習一下 jQuery 提供的 Deferred object. :P http://jsbin.com/usileh/3/edit#javascript,html,live 打開網頁最右邊有個 input,輸入 resolve 再按 enter 會把 legend 改成 resolved; 輸入 reject 再按 enter 會把 legend 改成 rejected。 deferred 可以想像成古墓派大門,附設一道斷龍石,斷龍石放下來就不能再打開了, 然後古墓裡有楊過、小龍女。斷龍石放下來只有兩種結果,一個是楊過、 小龍女成功從古墓中脫逃,或者逃脫失敗。成功脫逃會做哪些事情,逃脫失敗又怎麼做。 我們首先做了一個 deferred object, 接著讓 input 的 change handler 依據 value 改變 deferred 的狀態。 最後定義這個 deferred 成功會做哪些事情,失敗會做哪些事情。 心得: 我是覺得這樣程式碼比較好管理啦,以前如果有什麼東西依賴 XMLHttpRequest 的結果, 才能做某些事情,你就要用 ECMAScript5 裡面 Function.bind 的手法, 把自己包裝成一隻 subroutine 然後想辦法讓 xhr 的 success handler 執行, 固定幾隻可能還好,如果動態產生好幾支的話,會變不太好管理,程式碼寫的不是很漂亮, 也可能是我 javascript 太弱又沒什麼經驗才會寫得很醜啦。@@ 現在只要每次送 xhr 出去之前產生一個 deferred, 然後有其他 object 或 function 要幹嘛幹嘛,只要把 deferred 拿來, 用 done / fail / then 之類的 method 登記一下就好了。解法似乎比較優雅一點? -- Oni devas ami animalojn. Ili estas tiel bongustaj. One should love animals. They are so tasty. 每個人都應該愛動物,他們是如此美味。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.52.124
文章代碼(AID): #1EPugj3V (Ajax)
文章代碼(AID): #1EPugj3V (Ajax)