javascript - Prototype.js 1.4.0 抛出 'Refused to set unsafe header "连接“”错误

标签 javascript

我试图通过添加 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/

相关文章:

javascript - Selenium IDE - 选择OkOnNextConfirmation 而不使用assertConfirmation?

javascript - Angular 中的嵌套值/键 ng-repeat

javascript - 使用 .target.innerHTML 时我的输入总是返回 0

javascript - Angular UI 日期选择器在为空时验证为 false

javascript - Node js - 返回从sequelize数据库读取的对象数组的函数

javascript - 在解析中使用第三方库进行云代码时出现ReferenceError

javascript - AngularJS - ng-show 未按预期工作

javascript - 使用javascript加入两个数据集

javascript - 通过数组内调用的函数将多个元素添加到数组中?

javascript - 将简单参数传递给 Angular ui-bootstrap 模式?