首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery:$.ajaxSetup(beforeSend)和$(document).ajaxSend有什么区别吗?

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

Stack Overflow用户
提问于 2015-09-17 11:05:37
回答 3查看 3K关注 0票数 4

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

1) $.ajaxSetup(beforeSend)

代码语言:javascript
运行
复制
$.ajaxSetup({
  beforeSend: function (jqXHR, settings) {
    // whatever you need to do before
    // any jQuery Ajax request is sent
  }
});

2) $(文档).ajaxSend

代码语言:javascript
运行
复制
$(document).ajaxSend(function (event, jqXHR, settings) {
  // whatever you need to do before
  // any jQuery Ajax request is sent
});

有什么理由选一个比另一个好吗?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-17 11:21:38

来自jQuery $.ajaxSetup()文档:

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

$.ajaxSetup()所做的事情如下:

代码语言:javascript
运行
复制
ajaxExtend(jQuery.ajaxSettings, target);

来自$.ajaxSend()文档:

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

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

代码语言:javascript
运行
复制
function (fn) {
    return this.on(type, fn);
}

因此,基本上,$(document).ajaxSend()向所有文档中添加了一个事件侦听器,在该文档中,只要要发送jQuery Ajax调用,就可以使任何处理程序执行它(处理程序拦截它,但是XMLHttpRequest.readyState值已经是1 --“已打开”)。

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

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

票数 2
EN

Stack Overflow用户

发布于 2015-09-17 11:26:53

两者功能非常相似,但它总是取决于需要

  1. 方法,必须仅附加到文档。
  2. 如果调用$.ajax()时全局选项设置为false,则ajaxSend()方法将不会触发。
  3. 无论请求的类型如何,都将调用beforeSend选项。

从优先级的角度来看,您可以以这种方式使用ajaxSend中的所有设置选项,对于自定义或特定的ajax请求,可以在$.ajax()中使用beforeSend覆盖它。

代码语言:javascript
运行
复制
<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

代码语言:javascript
运行
复制
   $(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/

票数 0
EN

Stack Overflow用户

发布于 2015-09-17 11:44:16

来自JQuery的文档:

有两种类型的事件: 本地事件--这些回调可以在Ajax请求对象中订阅,如下所示:

代码语言:javascript
运行
复制
 $.ajax({
     beforeSend: function(){
     // Handle the beforeSend event
  },
     complete: function(){
     // Handle the complete event
  }
  // ......
});

全球事件 这些事件在文档上触发,调用可能正在侦听的任何处理程序。您可以这样收听这些事件:

代码语言:javascript
运行
复制
$(document).bind("ajaxSend", function(){
   $("#loading").show();
 }).bind("ajaxComplete", function(){
   $("#loading").hide();
 });

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

代码语言:javascript
运行
复制
$.ajax({
    url: "test.html",
    global: false,
    // ...
});

了解更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32628823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档