2

我想更改 AJAX 标头$.ajaxPrefilter并尝试以下操作:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    delete options.headers["myOwnHeader1"];
    options.headers["myOwnHeader2"] = "test";
});

在网络控制台 (Chrome)myOwnHeader2中设置和myOwnHeader1不设置。但它会引发以下异常:Uncaught TypeError: Cannot convert null to objectonoptions.headers["myOwnHeader2"] = "test";

4

1 回答 1

1

options对象不一定包含headers属性 - 只有在全局$.ajaxSettings或当前(原始)选项中给出时。所以你的选择是

  • 使用$.ajaxSetup({headers: {}});, 也许myOwnHeader2已经设置
  • 将您的删除/扩展操作包装在一个if ("headers" in options)块中
  • 如果不存在,则在预过滤器中动态创建 headers 对象:

options.headers = options.headers || {};
delete options.headers["myOwnHeader1"];
options.headers["myOwnHeader2"] = "test";
于 2013-02-26T02:56:01.047 回答