针对特定ajax调用的全局$ .ajax事件触发函数

时间:2015-12-15 10:40:24

标签: javascript jquery ajax

我已经有3-4次ajax调用了。 对于其中一个调用,我想触发一个全局ajaxSend事件的函数。这个特定的ajax调用不一定是序列中的第一个或最后一个。似乎如果我将ajaxSend事件附加到$(document),我的函数将每隔一次发生一次ajaxSend事件。这是我的代码的样子:

//ajax call one
$.ajax({
    type: "POST",
    url: myUrl,
    data: myData
});

//ajax call two <- let's say I'd like to fire ajaxSpecificFunc() here
$.ajax({
    type: "POST",
    url: myUrl,
    data: myData
});

//ajax call three
$.ajax({
    type: "POST",
    url: myUrl,
    data: myData
});


function ajaxSpecificFunc(){
    $(document).on("ajaxSend", function() {
        //Some code that should only happen on ajaxSend but for only one ajax call
    });
}
编辑:我知道ajax的global:false属性,但不想使用它,因为这意味着我将来必须修改每个新的ajax调用以使ajaxSpecificFunc()继续为一个特定的ajax电话开火

2 个答案:

答案 0 :(得分:2)

您可以在beforeSend中添加jQuery.ajax()

$.ajax({
    type: "POST",
    url: myUrl,
    data: myData,
    beforeSend: ajaxSpecificFunc
});

正如 A.Wolff 所述,如果我们调用此函数,它将为每个调用绑定ajaxsend。相反,您可以删除它,只需执行以下特定操作:

function ajaxSpecificFunc(jqXHR, settings){
   // you can work with the jqXhr and settings
}

答案 1 :(得分:1)

如果您无法将处理程序直接绑定到ajax调用,并且只想使用全局处理程序,那么您可以检查设置对象以查看ajax调用是否是您的目标,如果是,则调用您的东西< / p>

$(document).ajaxSend(function(event, jqXHR, settings) {
  console.log('send', settings);
  if (settings.url == 'myurl') {
    //then do your stuff
  }
})

注意:但这可能会成为一种矫枉过正的行为,您应该尝试针对您的ajax调用执行此操作