jQuery:$ .ajaxSetup(beforeSend)和$(document).ajaxSend之间有什么区别吗?

时间:2015-09-17 11:05:38

标签: javascript jquery ajax

使用jQuery(v2.1.4),这两种方法有什么区别吗?

1)$.ajaxSetup(beforeSend)

$.ajaxSetup({
  beforeSend: function (jqXHR, settings) {
    // whatever you need to do before
    // any jQuery Ajax request is sent
  }
});

2)$(document).ajaxSend

$(document).ajaxSend(function (event, jqXHR, settings) {
  // whatever you need to do before
  // any jQuery Ajax request is sent
});

有没有理由更喜欢一个而不是另一个?

谢谢!

3 个答案:

答案 0 :(得分:2)

来自jQuery $.ajaxSetup()文档:

  

使用任何函数的所有后续Ajax调用都将使用新设置,除非被单个调用覆盖,直到下一次调用$ .ajaxSetup()。

$.ajaxSetup()做了类似的事情:

ajaxExtend(jQuery.ajaxSettings, target);

来自$.ajaxSend()文档:

  

每当要发送Ajax请求时,jQuery都会触发ajaxSend事件。已经使用.ajaxSend()方法注册的任何和所有处理程序都会在此时执行。

$.ajaxSend()的jQuery源代码:

function (fn) {
    return this.on(type, fn);
}

因此,基本上$(document).ajaxSend()为所有文档添加了一个事件监听器,您可以在任何时候发送jQuery Ajax调用时执行任何处理程序(处理程序拦截它,但是XMLHttpRequest.readyState值已经1 - "已打开")。

这意味着如果在$.ajax()选项设置为global的情况下调用false,则ajaxSend()方法将不会触发。

$.ajaxSetup()上,您实际上为每个jQuery Ajax调用设置创建默认值,并且始终会调用通过beforeSend选项定义的回调({{1} } value是XMLHttpRequest.readyState - " Unsent")。

答案 1 :(得分:0)

两者都有非常相似的功能,但它总是取决于需要 您可以关注一些关键点

  1. ajaxSend()方法,只能附加到文档。
  2. 如果在全局选项设置为false的情况下调用$.ajax(),则ajaxSend()方法将不会触发。
  3. 无论请求的类型如何,都会调用beforeSend选项。
  4. 从优先级的角度来看,您可以通过这种方式使用ajaxSend中的所有设置选项以及自定义或特定的ajax请求,使用beforeSend中的$.ajax()覆盖它。< / p>

    <强> HTML

    <body>
    
    <div><h2>Let AJAX change this text</h2></div>
    
    <button id="btn1">Change Content</button>
    <button id="btn2">Change Content Override</button>
    
    </body>
    

    JS

       $(document).ajaxSend(function(e, xhr, opt){
            $("div").append("<p>Requesting " + opt.url + "</p>");
        });
        $("#btn1").click(function(){
            $("div").load("yourpage.html");
        });
        $("#btn2").click(function(){
            $.ajax({
            global: false,
            beforeSend:function(){$("div").append("<p>Overriding</p>");}
            });
        $("div").load("yourpage.html");
        });
    

    LIVE http://jsfiddle.net/mailmerohit5/w8t44247/

答案 2 :(得分:0)

来自JQuery的文档:

  

有两种类型的事件:

     

本地活动      这些是您可以在Ajax请求中订阅的回调      对象,如:

 $.ajax({
     beforeSend: function(){
     // Handle the beforeSend event
  },
     complete: function(){
     // Handle the complete event
  }
  // ......
});
  

全球活动

     

这些事件在文档上触发,调用任何处理程序   可能在听。您可以像这样监听这些事件:

$(document).bind("ajaxSend", function(){
   $("#loading").show();
 }).bind("ajaxComplete", function(){
   $("#loading").hide();
 });
  

可以通过传入全局选项来禁用特定Ajax请求的全局事件,如下所示:

$.ajax({
    url: "test.html",
    global: false,
    // ...
});

for more information