是否可以在每次请求服务器之前调用Javascript函数?

时间:2015-05-19 12:09:01

标签: javascript http

我在本地存储中有一些内容。每次通过调用类似(xhr.setRequestHeader('custom-header','value');)之类的服务器发出请求时,我想在http头中发送它。

,而不是在每次请求之前调用执行此任务的函数,而是希望它被调用。

2 个答案:

答案 0 :(得分:4)

这可以通过覆盖send方法轻松完成:

// save the real `send`
var realSend = XMLHttpRequest.prototype.send;

// replace `send` with a wrapper
XMLHttpRequest.prototype.send = function() {
    this.setRequestHeader("X-Foobar", "my header content");

    // run the real `send`
    realSend.apply(this, arguments);
}

这会将XMLHttpRequest.prototype.send转换为执行某些任意操作的函数(此处,在X-Foobar实例上设置XMLHttpRequest请求标头),然后使用real {执行实际的Ajax请求{1}}方法。

答案 1 :(得分:0)

本地存储实际上是设计为而不是以自动发送到服务器。这样做是为了改进cookie,这会导致很大的开销(如果他们持有大量数据),因为它们随每个页面请求一起发送。这会减慢速度,特别是对于手机来说非常糟糕。因此,您必须继续使用已使用的方法,或采取其他回复中提供的其他建议。