鍍金池/ 問答/Java  HTML/ ajax請求完成的回調(diào)函數(shù)

ajax請求完成的回調(diào)函數(shù)

現(xiàn)在有個需求,在請求之前顯示加載組件,請求完成立馬隱藏加載顯示。但是ajax值提供了4種回調(diào)函數(shù):beforeSend,success,error,complete。要隱藏加載顯示的組件,要么在success和error里面都加入隱藏加載的邏輯,要么在complete函數(shù)加一次,但是這種方式如果在success函數(shù)里面發(fā)生了異常,就不會走到complete函數(shù)里面,也就無法隱藏加載組件,有什么辦法實現(xiàn)只寫一次隱藏加載的邏輯么?

 $.ajax({
    url: url,
    data: this.reqSearch,
    complete:function(XMLHttpRequest,textStatus){
        that.$Spin.hide();
    },
    success: function(res) {
    ......
    },
    error: function(){
    ......
    }
 })
回答
編輯回答
硬扛

$.ajax就提供這些回調(diào),你這需求complete應該是最合適的,話說success內(nèi)會發(fā)生異常你要做的難道不應該是去調(diào)試避免嗎?這腦回路清奇
要真不想調(diào)試最好的解決的方式是把successerror處理代碼都放在complete里,先that.$Spin.hide();再根據(jù)Status處理后繼

2018年6月9日 09:53
編輯回答
小眼睛

.then().catch()?

then的時候強制報錯。。。好變態(tài)呀。
then和fail都走通過一個方法?

$.ajax({
    urL:'/',
    beforeSend: v=>console.log('beforeSend'),
    error: v=>console.log('error'),
    dataFilter: v=>console.log('dataFilter'),
    success: v=>console.log('success'),
    complete: v=>console.log('complete')
})
.then(v=>console.log('then'))
.fail(v=>console.log('fail'))

beforeSend 在發(fā)送請求之前調(diào)用,并且傳入一個XMLHttpRequest作為參數(shù)。
error 在請求出錯時調(diào)用。傳入XMLHttpRequest對象,描述錯誤類型的字符串以及一個異常對象(如果有的話)
dataFilter 在請求成功之后調(diào)用。傳入返回的數(shù)據(jù)以及"dataType"參數(shù)的值。并且必須返回新的數(shù)據(jù)(可能是處理過的)傳遞給success回調(diào)函數(shù)。
success 當請求之后調(diào)用。傳入返回后的數(shù)據(jù),以及包含成功代碼的字符串。
complete 當請求完成之后調(diào)用這個函數(shù),無論成功或失敗。傳入XMLHttpRequest對象,以及一個包含成功或錯誤代碼的字符串。

2018年4月1日 19:31