gpt4 book ai didi

javascript - 有没有办法删除 setRequestHeader() 设置的 Ajax header ?

转载 作者:行者123 更新时间:2023-12-03 21:44:41 27 4
gpt4 key购买 nike

我正在编写一个位于系统中的 JS 脚本,该脚本现在通过 jqXHR.setRequestHeader() 在使用 jQuery.ajaxPrefilter() 注册的函数中向所有 Ajax 请求添加自定义 XID header 。

在我的脚本中,我需要向第三方站点发出 Ajax 请求,该站点的 Access-Control-Allow-Headers 未设置为允许此自定义 XID header 。

看来我有3个选择:

  1. 找到一种方法来删除 $.ajax() 的 beforeSend 函数中的 XID header ,我已确认该函数会在 ajaxPrefilter() 函数之后被调用。
  2. 完全放弃使用 $.ajax() 并自己编写 Ajax 内容。
  3. 让 $.ajax() 指向接受自定义 XID header 的系统后端,并通过 cURL 向第三方站点执行请求。

如果有简单的方法,则首选选项#1,因为它将是最干净、最快的路线。只是不知道如何

我尝试过像这样覆盖它,但没有成功:

beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}

有什么想法吗?

最佳答案

我意识到这是一个旧线程,但它仍然是一个问题!希望以下内容能够帮助其他人解决这个问题,就像我们一样。

将 header 设置为 null/undefined/""设置后删除它,它仍然发送 header ,但没有值或“未定义”或“null”。这可能永远不是您想要的,在我们的例子中,当它是授权 header 时,完全搞砸了 SSO。

我们提出的解决方案依赖于 @marlar 的建议(感谢)和 jQuery 的另一个缺陷的结合:你只能有一个 beforeSend()钩子(Hook),并且任何新钩子(Hook)都会替换之前的钩子(Hook)。如果您提供 beforeSend() ,这似乎也是如此。在特定的$.ajax()请求 - 它将覆盖 $.ajaxSetup() 中的任何默认请求。通过这样做,您可以防止默认 Hook 设置 header 。 (这不是 100% 理想,因为默认 beforeSend() 中可能会执行其他操作,但这些操作不会发生,但是嘿)。

因此,这可以处理特定请求的静态和动态设置 header :

if($.ajaxSettings && $.ajaxSettings.headers) {
delete $.ajaxSettings.headers.Authorization;
}
$.ajax({
beforeSend: function() {}, // no op
// ...
});

您不能对 prefilter() 执行相同的操作,但我认为beforeSend()无论如何,这是更常见的方法。

关于javascript - 有没有办法删除 setRequestHeader() 设置的 Ajax header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18491368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com