小编典典

将自定义http标头添加到所有jQuery AJAX请求中

ajax

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

如果您看看jquery $.ajax自定义http标头问题(不是我的问题),您将看到一个很好的示例,说明如何为每个ajax调用手动实现代码。

我想为所有jQuery
ajax调用覆盖beforeSend。根据jQuery文档,我可以使用jQuery.ajaxSetup()来做到这一点,但有一条警告说您可能不应该这样做,可能会导致意外的行为。对于此类全局回调,他们建议使用.ajaxStart()。
.ajaxStart()看起来不错,但它不公开XHR,因此我可以添加标题。

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


阅读 304

收藏
2020-07-26

共1个答案

小编典典

前置过滤器将是实现此目的的简便方法:

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

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

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

2020-07-26