ajax请求完成的回调函数

现在有个需求,在请求之前显示加载组件,请求完成立马隐藏加载显示。但是ajax值提供了4种回调函数:beforeSend,success,error,complete。要隐藏加载显示的组件,要么在success和error里面都加入隐藏加载的逻辑,要么在complete函数加一次,但是这种方式如果在success函数里面发生了异常,就不会走到complete函数里面,也就无法隐藏加载组件,有什么办法实现只写一次隐藏加载的逻辑么?

 $.ajax({
    url: url,
    data: this.reqSearch,
    complete:function(XMLHttpRequest,textStatus){
        that.$Spin.hide();
    },
    success: function(res) {
    ......
    },
    error: function(){
    ......
    }
 })
阅读 10.8k
2 个回答

.then().catch()

then的时候强制报错。。。好变态呀。
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 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。
error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话)
dataFilter 在请求成功之后调用。传入返回的数据以及"dataType"参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数。
success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。
complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。

$.ajax就提供这些回调,你这需求complete应该是最合适的,话说success内会发生异常你要做的难道不应该是去调试避免吗?这脑回路清奇
要真不想调试最好的解决的方式是把successerror处理代码都放在complete里,先that.$Spin.hide();再根据Status处理后继

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题