在beforeSend上删除ajax加载程序,并在开始后再次添加

问题描述

从此代码开始,将触发我们项目上的ajax事件,并将其添加到应用程序标头的jsp中。这是一个通用的代码,因此我们无法在此代码中进行更改

2020-01-01 02:00:00

#ajaxStatus是包含加载程序的div的ID,而 div

var secondsRemaining = 60

let timer = Timer.scheduledTimer(withTimeInterval: 1.0,repeats: true,block: { timer in
        print(secondsRemaining)
        secondsRemaining -= 1
    })

ajax 请求是

$( document ).ajaxSend(function( event,request,settings ) {
    $("#ajaxStatus").show()
});

$( document ).ajaxStop(function( event,settings ) {
    $("#ajaxStatus").hide()
});

$( document ).ajaxError(function( event,settings ) {
    $("#ajaxStatus").hide()
});

所以我想要删除ajax的beforeSend()中的加载程序。我们尝试了.unbind()和.hide(),但是没有用。起作用的是.remove(),但是如果我们删除加载器,则会从DOM中删除整个加载器div,因此我们需要在ajax成功函数之后再次添加该div,而无需刷新页面。我们可以在不刷新页面的情况下再次添加该div吗?还是我们可以仅将加载程序隐藏在beforeSend()中而不删除它?

解决方法

我认为您可以将global属性设置为false,以防止使用全局处理程序(ajaxSend,Stop等)

$.ajax({
      url: "${createLink(controller: 'test',action: 'test123')}",global: false,...

;-)

,

请使用jQuery CSS方法尝试以下解决方案。

$.ajax({
    url: "${createLink(controller: 'test',data: "${true}",type: "POST",dataType: "json",beforeSend:function(){
        $('#ajaxStatus').css('display','block');
    },success: function (data) {
        $('#ajaxStatus').css('display','none');
    },complete: function (data) {
    }
});