如何只执行一次ajaxStart和ajaxEnd

how can I execute ajaxStart and ajaxEnd just one time

本文关键字:一次 ajaxStart ajaxEnd 执行      更新时间:2024-04-20

我想在网页提交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(){ console.log("ajax started~!"); });,ajaxStart函数将不起作用它可以工作,但所有ajax请求都将绑定此函数:/我该怎么处理它

如果您不希望您的启动方法应用于所有请求,那么您可以在请求中使用beforeSend回调?

$.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);
});