根据应用程序的上下文,您可以订阅回调以触发某些全局AJAX 事件。比如说,每当 AJAX 调用开始时,或者每当 AJAX 调用抛出错误时。
$(document)
.ajaxStart(function (e) {
$('body').showMyAwesomeLoadingGIF();
})
.ajaxComplete(function (e) {
$('body').hideMyAwesomeLoadingGIF();
});
这将导致这两个回调函数在文档中进行的每个 AJAX 调用的适当生命周期事件期间触发。
如果出于某种原因,您希望某个 AJAX 调用不触发您的全局 AJAX 事件处理程序,则可以指定该特定 AJAX 调用不是 global。
$.ajax({
global : false,
// blah
})
更多关于全局 AJAX 事件处理的信息在这里。
编辑
如果您想保持更精细的控制,可以$.ajaxSetup()
使用 ,但由于 jQuery 本身不鼓励使用它,我认为您可能不得不制定自己的解决方案。
就个人而言,如果您希望重复执行某些操作,我会使用带有闭包的包装函数来设置我的自定义选项值。
var ajax = (function () {
var defaults = { };
return function (opts) {
opts = $.extend({}, defaults, opts);
// place what you want to happen when an AJAX call starts here
return $.ajax(opts)
// place corresponding events here
.done(function (m) {
})
.fail(function (x,s,e) {
})
.complete(function (m) {
});
};
}());
// then use that in your code like how you'd use $.ajax():
ajax({
url : 'http://my.domain.com/api/users',
type : 'GET'
}).done(function (m) {
console.log('Done GET users.');
});
// ... and you can be sure that it has default options and default event handlers,
// while being able to add on to them if you wish.