我有办法跟踪当前的Ajax请求,其中涉及 $。ajaxSetup(),并且在发送前后计算&完成。
var ajaxProcs = 0;
$.ajaxSetup({
beforeSend : function () { ajaxProcs++; },
complete : function () { ajaxProcs--; }
});
问题是,如果任何给定的 $。ajax()调用具有beforeSend或者完成,它将会丢弃正在运行的Ajax请求的正确计数。
例如,这会覆盖它,不会将1 添加到ajaxProcs计数。
$.ajax({
beforeSend : function () { /* blah blah */ }
});
是否可以同时使用ajaxSetup和$ .ajax覆盖运行?
答案 0 :(得分:4)
这个怎么样,让我们尝试 beforeSend()作为样本..
$.ajaxSetup({
beforeSend: function(){
console.log('execute another beforeSend() function');
}
});
然后这是你的Ajax函数:
$.ajax({
beforeSend : function () {
console.log('execute beforeSend() function');
if('beforeSend' in $.ajaxSettings){
$.ajaxSettings.beforeSend();
}
}
...
现在它将执行两个函数
希望有所帮助
答案 1 :(得分:3)
试试这个:
var ajaxProcs = 0;
$(document).ajaxSend(function(){
ajaxProcs++;
});
$(document).ajaxComplete(function(){
ajaxProcs--;
});
这将在每个jQuery ajax调用上运行,无论您绑定到各个请求的回调是什么。
答案 2 :(得分:2)
ajaxSetup()
为可以传递给ajax()
函数的参数提供默认值。它们仅作为默认值应用,而不是在实际的ajax()
调用中提供。
JQuery的ajaxStart()
,ajaxSend()
和ajaxComplete()
是您可能想要了解的内容。在每次ajax调用之前和之后调用它们。
单个global
调用上有一个ajax()
选项会禁用这些全局函数。
不是一个完整的答案,因为它可以覆盖但可能有用。
答案 3 :(得分:1)
由于jQuery的设计方式,我认为最好的办法是制定一条规则,从beforeSend手动调用ajaxSetup函数。即使jQuery有更多的OO方法,你仍然需要调用父级 - 它不会神奇地自称。
var ajaxProcs = 0;
var setupObj = {
beforeSend : function(xhr) { ajaxProcs++; console.log('Increased to: ' + ajaxProcs); },
complete : function() { ajaxProcs--; console.log('Decreased to: ' + ajaxProcs); }
};
$.ajaxSetup(setupObj);
$.ajax({
url: 'http://fiddle.jshell.net',
beforeSend : function (xhr) {
setupObj.beforeSend(xhr);
}
});