jquery ajax作為deferred對象如何觸發(fā)progress?
jQuery deferred對象存在三種狀態(tài)觸發(fā)函數(shù),resolve,fail,notify,分別對象成功,失敗,進(jìn)行中三種回調(diào)函數(shù),當(dāng)deferred不是promise對象的時候可以自行通過調(diào)用三個方法來觸發(fā)不同的狀態(tài)從而觸發(fā)相應(yīng)的回調(diào)函數(shù)。但是jquery ajax就是一個promise對象,不能手動的觸發(fā)notify,查閱deferred的pipe方法,可以傳遞三個回調(diào)函數(shù),對應(yīng)上訴的三種狀態(tài),但是,成功,失敗回調(diào)都是內(nèi)部自行控制,外部不能干預(yù),那是不是說,通過pipe的方式執(zhí)行ajax是沒有機(jī)會執(zhí)行progress方法的呢?有的話,如何控制?如果有需要在ajax執(zhí)行中添加函數(shù)的需求,如何實(shí)現(xiàn)呢?
2018-07-16
2016-02-05
通過pipe的方式執(zhí)行ajax是沒有機(jī)會執(zhí)行progress方法的呢?
很明顯,ajax并沒有調(diào)用notifyWith的地方。所以,不會有機(jī)會執(zhí)行progress方法。
另外,對于XMLHttpRequest的事件而言。
onreadystatechange才能監(jiān)聽傳輸中狀態(tài),也就是觸發(fā)progress方法
而jQuery.ajax使用的是onload方法,onload只在ajax加載完成才會觸發(fā)。如下:
所以,如果想要觸發(fā)progress方法,需要再綁定一個事件: