我试图通过添加 setRequestHeaders
函数 if()
和 来覆盖
以避免指定的标题:prototype.js
>继续;
for (var i = 0; i < requestHeaders.length; i += 2){
if("Connection" === requestHeaders[i] || "Connection" === requestHeaders[i+1])
continue;
this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
}
在 IE9 上,无需更改 prototype.js
即可正常工作,但在其他浏览器(Chrome、Firefox 等)中,标题中会出现错误。
感谢您的建议和帮助! :)
[编辑]
关于重复:
我找到了这个主题,但它不一样。在重复的主题中有一个可以修改的文件,但我无法修改 prototype.js
的代码。
[编辑2]
此代码位于1.4.0(如标题所示),第661-685行
setRequestHeaders: function() {
var requestHeaders =
['X-Requested-With', 'XMLHttpRequest',
'X-Prototype-Version', Prototype.Version];
if (this.options.method == 'post') {
requestHeaders.push('Content-type',
'application/x-www-form-urlencoded');
/* Force "Connection: close" for Mozilla browsers to work around
* a bug where XMLHttpReqeuest sends an incorrect Content-length
* header. See Mozilla Bugzilla #246651.
*/
if (this.transport.overrideMimeType)
requestHeaders.push('Connection', 'close');
}
if (this.options.requestHeaders)
requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
for (var i = 0; i < requestHeaders.length; i += 2){
console.log(requestHeaders[i] + " AND " + requestHeaders[i+1]);
//My edition - BEGIN;
if("Connection" === requestHeaders[i] || "Connection" === requestHeaders[i+1])
continue;
//END;
this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
}
}
谢谢! :)
最佳答案
看来您想在不触及库代码本身的情况下更改 Prototype 的行为。
这不是问题,您可以更换 setRequestHeaders
运行时函数。
将此包含在 <script>
之后加载原型(prototype)的行,但在您执行其他操作之前。
// monkey-patch Prototype's Ajax request (the following is for Prototype 1.4!)
Ajax.Request.prototype.setRequestHeaders = function () {
var requestHeaders =
['X-Requested-With', 'XMLHttpRequest',
'X-Prototype-Version', Prototype.Version];
if (this.options.method == 'post') {
requestHeaders.push('Content-type',
'application/x-www-form-urlencoded');
/* Force "Connection: close" for Mozilla browsers to work around
* a bug where XMLHttpReqeuest sends an incorrect Content-length
* header. See Mozilla Bugzilla #246651.
*/
if (this.transport.overrideMimeType)
requestHeaders.push('Connection', 'close');
}
if (this.options.requestHeaders)
requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
for (var i = 0; i < requestHeaders.length; i += 2) {
if (requestHeaders[i].toLowerCase() === "connection") continue;
this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
}
};
关于javascript - Prototype.js 1.4.0 抛出 'Refused to set unsafe header "连接“”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32439501/