我有一个使用Backbone.js的应用程序,其中包含各种AJAX请求。我希望能够拦截所有AJAX请求,并在不必在定义点指定这些函数的情况下执行一些预处理和后处理函数。
我想要做的事情的一个例子是,如果请求的响应表明用户未登录,则显示全屏模态框。
我已经尝试使用jQuery进行以下操作:
我想要做的事情的一个例子是,如果请求的响应表明用户未登录,则显示全屏模态框。
我已经尝试使用jQuery进行以下操作:
jQuery.ajaxSetup({
beforeSend: function() {
return console.log("mybefore");
}
});
但是这种方式似乎无法捕捉使用sockets的XHR请求。
我也简要地研究了以下类似的做法:
XMLHttpRequest.prototype.reallySend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(body) {
console.log('mybefore');
this.reallySend(body);
};
在这个例子中,我不确定该如何处理after
所以经过所有这些,我的问题是:是否有一种优雅的方式可以覆盖ajax函数来进行预处理和后处理,而不改变请求的方式。
(任何关于backbone.js的特定解决方案也将很好)
Backbone.sync
。对于 jQuery,您已经弄清楚了。要绕过这两个并直接处理XMLHttpRequest
... 您想让这种劫持做什么?只是记录吗?还是修改一些东西? - Shadow ManXMLHttpRequest
而不是使用jQuery
或Backbone
来创建请求?任何你通过覆盖原型来修改行为的尝试都很可能会被看作是一种丑陋的 hack(个人认为上面的reallySend
方法就是 hack)。如果实在不能使用jQuery
,也许可以将XMLHttpRequest
封装在本地定义的CustomXMLHttpRequest
中? - Shadow Mansend
,但即使如此,你能保证它们不会(永远不会)覆盖发送方法吗?由于你无法控制库,因此只能说明你正在使用的当前版本的情况。尽可能使用API,因为它们被设计为这样。即使实现更改以加快速度或修复一些错误,它们也很可能保持不变。 - Shadow Man