Javascript 如何只执行一次ajaxStart和ajaxEnd

Javascript 如何只执行一次ajaxStart和ajaxEnd,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想在网页提交ajax请求时弹出加载gif,但是如何将加载函数绑定到每个ajax请求,而不是绑定到所有ajax请求,因为有些请求不需要弹出加载窗口 $("#genericSearchPage_window input[name=submit]").click(function(e){ $("#genericSearchPage_window input[name=submit]").ajaxStart(function(){ console.log("ajax start

我想在网页提交ajax请求时弹出加载gif,但是如何将加载函数绑定到每个ajax请求,而不是绑定到所有ajax请求,因为有些请求不需要弹出加载窗口

$("#genericSearchPage_window input[name=submit]").click(function(e){
    $("#genericSearchPage_window input[name=submit]").ajaxStart(function(){
        console.log("ajax started~!");
    });
    $.ajax({
        url:"genericSearch.genericSearch.html",
        data: $("#genericSearchPage_window #genericSearchForm").serializeJson(),
        dataType:"json"
    }).done(function(data){
        genericSearchProcess(data);
    });
});
在这个函数中,如果我们将其更改为
$(document.ajaxStart(function()),ajaxStart函数就不起作用{
log(“ajax已启动~!”;
});
它可以工作,但所有ajax请求都将绑定此函数:/

我该如何处理它

如果您不想将start方法应用于所有请求,那么您可以在请求时使用
发送前
回调

$.ajax({
    url:"genericSearch.genericSearch.html",
    data: $("#genericSearchPage_window #genericSearchForm").serializeJson(),
    beforeSend: function(jqXHR, settings) {
        console.log("ajax started~!");
    },
    dataType:"json"
}).done(function(data){
    genericSearchProcess(data);
});
或者,查看
global
属性,它阻止调用像ajaxStart这样的全局方法

$.ajax({
    url:"genericSearch.genericSearch.html",
    data: $("#genericSearchPage_window #genericSearchForm").serializeJson(),
    global: false,
    dataType:"json"
}).done(function(data){
    genericSearchProcess(data);
});

如果将其放入单击处理程序中,为什么不能在没有ajaxStart的情况下调用弹出窗口?否则可以为
$.ajax
创建包装器,并将
showPopup
作为布尔参数传递。另请查看
设置
对象,查看是否可以在
ajaxStart
中创建简单条件。请参阅文档examples@charlietfl你的想法很酷,但我想把这个函数写成一个普通函数,就像插件一样,我可以点击按钮弹出,但是我怎么知道ajax请求完成了呢?可以使用ajaxComplete来隐藏弹出窗口…如果它不可见的话,可以吗nothing@charlietfl这是一个好主意,我稍后会尝试,我正在尝试不同的对象。