我试图通过prototype.js
函数setRequestHeaders
添加if()
来覆盖 continue;
,以避免指定标题:
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
的代码。
[EDIT2]
此代码在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]);
}
}
谢谢! :)
答案 0 :(得分:0)
因此,您似乎想要在不触及库代码本身的情况下更改Prototype的行为。
这不是问题,您可以在运行时替换setRequestHeaders
函数。
在加载原型的<script>
行之后但在您执行任何其他操作之前包含此内容。
// 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]);
}
};
答案 1 :(得分:0)
prototype.js 的更高版本(1.5+?)仅将 Connection
标头设置为非常旧的 Firefox 浏览器,因此此问题会随着升级而消失。