Javascript jQuery:$.ajaxSetup(发送前)和$(document.ajaxSend)之间有什么区别吗?

Javascript jQuery:$.ajaxSetup(发送前)和$(document.ajaxSend)之间有什么区别吗?,javascript,jquery,ajax,Javascript,Jquery,Ajax,使用jQuery(v2.1.4),这两种方法之间有什么区别吗 1) 2) 有什么理由选择其中一个而不是另一个吗 谢谢 来自jQuery文档: 在下次调用$.ajaxSetup()之前,所有使用任何函数的后续Ajax调用都将使用新设置,除非被单个调用覆盖 $.ajaxSetup()执行如下操作: ajaxExtend(jQuery.ajaxSettings, target); 从文件: 无论何时发送Ajax请求,jQuery都会触发ajaxSend事件。此时将执行使用.ajaxSend()方法注

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

1)

2)

有什么理由选择其中一个而不是另一个吗

谢谢

来自jQuery文档:

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

$.ajaxSetup()
执行如下操作:

ajaxExtend(jQuery.ajaxSettings, target);
从文件:

无论何时发送Ajax请求,jQuery都会触发ajaxSend事件。此时将执行使用.ajaxSend()方法注册的所有处理程序

以及
$.ajaxSend()
的jQuery源代码:

因此,基本上,
$(document).ajaxSend()将事件侦听器添加到所有文档中,您可以使任何处理程序在即将发送jQuery Ajax调用时执行(处理程序截获它,但值已
1
-“打开”)

这意味着,如果调用
$.ajax()
时将
global
选项设置为
false
,将不会触发
ajaxSend()
方法


$.ajaxSetup()
上,实际上您正在为每个jQuery Ajax调用的设置创建默认值,并且通过
beforeSend
选项定义的回调将始终被调用(
XMLHttpRequest.readyState
值为
0
-“Unsent”)。

两者的功能非常相似,但这始终取决于需要 这里有一些关键点,你可以关注它们

  • ajaxSend()方法,必须仅附加到文档
  • 如果在全局选项设置为false的情况下调用
    $.ajax()
    ,则不会触发
    ajaxSend()
    方法
  • 无论请求的类型如何,都将调用
    beforeSend
    选项
  • 从优先级的角度来看,您可以这样使用:
    ajaxSend
    中的所有设置选项,对于自定义或特定的ajax请求,在
    $.ajax()中使用
    beforeSend
    覆盖它

    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>
    
    
    让AJAX更改此文本
    更改内容
    更改内容覆盖
    
    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");
        });
    
    $(文档).ajaxSend(函数(e、xhr、opt){
    $(“div”)。追加(请求“+opt.url+”

    ”; }); $(“#btn1”)。单击(函数(){ $(“div”).load(“yourpage.html”); }); $(“#btn2”)。单击(函数(){ $.ajax({ 全球:错, beforeSend:function(){$(“div”).append(重写

    );} }); $(“div”).load(“yourpage.html”); });

    LIVE

    来自JQuery的文档:

       $(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");
        });
    
    有两种类型的事件:

    本地活动 这些是可以在Ajax请求中订阅的回调 反对,就像这样:

    全球活动

    这些事件在文档上被触发,调用任何 我可能在听。您可以像这样收听这些事件:

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


    问题不是关于
    $.ajaxSetup()
    本身,而是在
    $.ajaxSetup()
    -
    $.ajaxSetup({beforeSend:function(jqXHR,settings){…}})之前向
    $(document)注册
    处理程序。ajaxSend(…)
    @Andreas当我说它将覆盖默认设置时,有点含蓄。编辑后更清晰。谢谢@Joelalmeda,谢谢你的快速回复!只是一个简单的问题来澄清您的说法:如果jQuery Ajax请求在选项(我们称之为“x”)和
    $(文档)中配置了
    beforeSend
    回调,那么ajaxSend()
    也配置了回调(我们称之为“y”),那么在发送请求之前是否会执行回调(“x”和“y”),如果是,顺序是什么?干杯:)回调
    x
    将在回调
    y
    之前执行,好的,听起来我们有一个好答案!在接受之前,我将添加一个编辑,以包括@RohitKumar answer中提到的
    global
    选项,imho是一个相关点。谢谢大家的帮助!
    <body>
    
    <div><h2>Let AJAX change this text</h2></div>
    
    <button id="btn1">Change Content</button>
    <button id="btn2">Change Content Override</button>
    
    </body>
    
       $(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");
        });
    
     $.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({
        url: "test.html",
        global: false,
        // ...
    });