【问题标题】:Add custom http header to all jQuery AJAX Requests将自定义 http 标头添加到所有 jQuery AJAX 请求
【发布时间】:2023-03-12 06:58:02
【问题描述】:

澄清点:向我的 jQuery ajax 调用添加自定义标头没有任何问题,我希望将我的自定义标头自动添加到所有 ajax 调用中。

如果您查看jquery $.ajax custom http headers issue(不是我的问题),您会看到一个很好的示例,说明如果为每个 ajax 调用手动实现代码是如何工作的。

我想为所有 jQuery ajax 调用覆盖 beforeSend。根据 jQuery 文档,我可以使用jQuery.ajaxSetup() 来做到这一点,但是有一个警告说你可能不应该这样做,可能会导致意外行为,所有这些东西。对于这种全局回调,他们建议使用 .ajaxStart()。 .ajaxStart() 看起来不错,只是它没有暴露 XHR,所以我可以添加标题。

我应该只使用 ajaxSetup 添加 beforeSend 吗?有没有办法从 ajaxStart 访问 XHR?其他选择?

【问题讨论】:

标签: jquery ajax authentication http-headers xmlhttprequest


【解决方案1】:

预过滤器是实现此目的的一种简单方法:

$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');
        }
    }
});

这样所有请求都将获得自定义标头,除非特定请求覆盖了 beforeSend 选项。

但是请注意,您可以使用 ajaxSetup 实现相同的目标。存在警告的唯一原因是因为使用它会影响所有 ajax 请求(就像我的方法一样),如果特定请求不需要该选项集,可能会导致不需要的结果。我建议只使用 ajaxSetup,毕竟这就是它的用途。

【讨论】:

  • 你不需要修改beforeSend函数。 jqXHR 对象作为$.ajaxPrefilter(options, originalOptions, jqXHR) 函数中参数的一部分公开。所以你可以在预过滤函数jqXHR.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');里面写
【解决方案2】:

可以使用ajax全局事件ajaxSend()

$( document ).ajaxSend(function( event, jqxhr, settings ) {
    jqxhr.setRequestHeader(name, value)
});

演示:Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2011-12-02
    相关资源
    最近更新 更多