总是在XHR请求中附加一些内容

Append something always to an XHR Request

本文关键字:XHR 请求      更新时间:2023-09-26

我想将JS变量附加到将从我的单页web应用程序发出的每个XHR请求。

实现这一目标的最佳方法是什么?我不想建立具有此属性的特殊发送方法,因为可能有第三方与我的应用程序集成。

我考虑过覆盖XHR对象上的send方法,但这也不被认为是好的风格。由于请求是跨域的,我无法使用cookie。

对此有什么更好的想法或方法吗?

谢谢!-Alessandro

如果你真的想在不添加任何类似库的功能的情况下扩展现有功能,你可以使用monkey补丁来解决这个问题:

(function() {
    var originalOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
        var getParameter = 'foo=bar';
        if(url.indexOf('?') === -1) {
           url = url + '?' + getParameter;
        } else {
           url = url + '&' + getParameter;
        }
        console.log('you just got monkey-patched! url is now:', url);
        originalOpen.call(this, method, url, async, user, password);
    }
})();
var request = new XMLHttpRequest();
request.open('get', 'http://google.com');

另请参阅这个jsfiddle以获得一个工作示例。

如果修补了send()函数,那么在将内容注入请求主体时也可以使用相同的技术。若要这样做,请确保注意要传输的数据类型(请参阅MDN)。将参数附加到二进制主体是没有意义的;)