我正在覆盖XMLHttpRequest.prototype.send = function(a,b) { }
和XMLHttpRequest.prototype.open = function(a,b) { }
,因此我可以拦截每次ajax调用得到的每一个响应。有时,其中一些请求失败,当发生这种情况时,我需要更新DOM的cookie并重试失败的原始XHR。
考虑到我无法控制那些XHR,意味着我不创建或执行它们,我是否可以使用新的更新cookie重试那些XHR?
现在,我将原始XHR保存在一个新变量中,当它失败时,我会执行xhr.open.apply()
然后xhr.send.apply()
。使用像Charles这样的HTTP Web代理,我能够检查我的响应,并且总是收到错误消息:无效的请求...我也意识到原始XHR和重试的XHR之间的区别在于X-Request-With标头是总是失踪。
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
嗯,这是可能的,我设法做到了。
我创建了一个重试原始请求的函数,在那里我传递了传递给XMLHTTPRequest.prototype.send函数的相同参数,该函数在发送之前拦截了XMLHTTPRequest。
function retryOriginalRequest(a,b, args) {
var originalRequest = new XMLHttpRequest();
originalRequest.open(a,b, true);
// The request headers need to be set up after the open call and before the send.
originalRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
originalRequest.send(args, null);
};