我想将JS变量附加到将从我的单页Web应用程序发出的每个XHR请求。
实现这一目标的最佳方法是什么?我不想建立使用此属性发送的特殊方法,因为可能有第三方与我的应用程序集成。
我考虑过覆盖XHR对象上的send方法,但这也不算好。 由于请求是跨域的,我不能使用cookie。
有更好的想法或方法吗?
谢谢! -Alessandro
答案 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)。将参数附加到二进制体是没有意义的;)