总是在XHR请求中附加内容

时间:2013-11-21 09:32:32

标签: javascript xmlhttprequest

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

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

我考虑过覆盖XHR对象上的send方法,但这也不算好。 由于请求是跨域的,我不能使用cookie。

有更好的想法或方法吗?

谢谢! -Alessandro

1 个答案:

答案 0 :(得分:1)

如果你真的想扩展现有功能而不添加任何类似库的功能,你可以使用猴子修补来解决这个问题:

(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');

另见this jsfiddle for a working example

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