亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

jquery ajax作為deferred對象如何觸發progress?

jQuery deferred對象存在三種狀態觸發函數,resolve,fail,notify,分別對象成功,失敗,進行中三種回調函數,當deferred不是promise對象的時候可以自行通過調用三個方法來觸發不同的狀態從而觸發相應的回調函數。但是jquery ajax就是一個promise對象,不能手動的觸發notify,查閱deferred的pipe方法,可以傳遞三個回調函數,對應上訴的三種狀態,但是,成功,失敗回調都是內部自行控制,外部不能干預,那是不是說,通過pipe的方式執行ajax是沒有機會執行progress方法的呢?有的話,如何控制?如果有需要在ajax執行中添加函數的需求,如何實現呢?

正在回答

2 回答

解決喜歡


0 回復 有任何疑惑可以回復我~

通過pipe的方式執行ajax是沒有機會執行progress方法的呢?

if?(?isSuccess?)?{
???deferred.resolveWith(?callbackContext,?[?success,?statusText,?jqXHR?]?);
}?else?{
???deferred.rejectWith(?callbackContext,?[?jqXHR,?statusText,?error?]?);
}

很明顯,ajax并沒有調用notifyWith的地方。所以,不會有機會執行progress方法。


另外,對于XMLHttpRequest的事件而言。

onreadystatechange才能監聽傳輸中狀態,也就是觸發progress方法

而jQuery.ajax使用的是onload方法,onload只在ajax加載完成才會觸發。如下:

xhr.onload?=?callback();
xhr.onerror?=?callback("error");

所以,如果想要觸發progress方法,需要再綁定一個事件:

xhr.onreadystatechange?=?function(){
????if(xhr.readyState==3){
????????//類似于jqXHR.notifyWidth(callbackContext);
????}
}


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

jquery ajax作為deferred對象如何觸發progress?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號