var _orgAjax = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
var xhr = _orgAjax();
DoSomeLogging();
return xhr;
};
我继承了上面的代码。有人可以确认我的理解是,这会覆盖页面上任何其他位置的$.ajax(...)
调用,并且每次都会执行DoSomeLogging()
吗?
我正在寻找一个不同的bug,但偶然发现了这一点,并希望确定我理解这段遗留代码的作用是什么?
我不相信这是xhr
函数的良好实践/使用,但有兴趣听取您的意见。我们正在使用Jquery 1.7.1。
最后,出于好奇,如果(_orgAjax()
)调用async: false
未能返回,即使到达日志记录方法会怎么样?
感谢。
答案 0 :(得分:4)
有人可以证实我的理解,这将覆盖任何 $ .ajax(...)调用页面上的任何其他位置并执行DoSomeLogging() 每一次?
是。除非在本地ajax实现中覆盖,否则这将定义全局默认行为。
更明确的定义全局设置的方法是使用ajaxSetup()。
但是,您也可以使用ajaxSettings
设置默认的全局行为,但这种特殊方式并未在jQuery文档中直接记录。
见DEMO - 成功
最后,出于好奇,如果_orgAjax()如果失败则返回怎么办? (async:false)调用,甚至可以达到日志记录方法吗?
设置正在配置beforeSend
,因此无论异步设置如何, Esailija 都会正确指出记录方法。
请参阅DEMO - async: true
,在返回之前调用日志记录
请参阅DEMO - 使用async: false
,在返回之前也会调用日志记录
但请注意,根据ajax documentation:
从jQuery 1.8开始,使用async:false和jqXHR($ .Deferred)是
过时;您必须使用完整/成功/错误回调。
我知道你使用的是1.7.1,但如果某些东西被弃用,通常有充分的理由,我认为没有任何伤害。
要配置ajax,默认情况下登录complete
:
请参阅DEMO - 为文档配置complete
的默认日志记录。
我知道这会使你的日志记录在发送之后而不是在发送之前执行,但这似乎是我认为1.8更喜欢它的方式。
答案 1 :(得分:0)
嗯,你可以:
$.ajaxSetup({
beforeSend: function () {
doSomeLogging();
}
});
这比重新定义$.ajaxSettings.xhr
更简单。