Javascript jQuery:$.ajaxSetup(发送前)和$(document.ajaxSend)之间有什么区别吗?
使用jQuery(v2.1.4),这两种方法之间有什么区别吗 1) 2) 有什么理由选择其中一个而不是另一个吗 谢谢 来自jQuery文档: 在下次调用$.ajaxSetup()之前,所有使用任何函数的后续Ajax调用都将使用新设置,除非被单个调用覆盖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()方法注
$.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,
// ...
});