向所有jQuery AJAX请求添加自定义http头

向所有jQuery AJAX请求添加自定义http头,jquery,ajax,authentication,http-headers,xmlhttprequest,Jquery,Ajax,Authentication,Http Headers,Xmlhttprequest,澄清点:在jQueryAjax调用中添加自定义头没有任何问题,我希望将自定义头自动添加到所有ajax调用中 如果您看一看(不是我的问题),您将看到一个非常好的示例,说明如果手动实现每个ajax调用,代码是如何工作的 我想覆盖所有jqueryajax调用的beforeSend。根据jQuery文档,我可以通过使用来实现这一点,但是有一条警告说,您可能不应该这样做,这可能会导致意外行为,等等。对于此类全局回调,建议使用.ajaxStart()。看起来不错,只是它没有公开XHR,所以我可以添加标题 我

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

如果您看一看(不是我的问题),您将看到一个非常好的示例,说明如果手动实现每个ajax调用,代码是如何工作的

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


我应该使用ajaxSetup在发送之前添加吗?有没有办法从ajaxStart访问XHR?其他选项?

您可以使用ajax全局事件


演示:

预过滤器是实现这一点的简单方法:

$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');
        }
    }
});
这样,所有请求都将获得自定义头,除非特定请求覆盖beforeSend选项


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

您可以添加一个前置过滤器@KevinB-您可以将其作为答案发布吗?您不需要在发送前修改
功能。jqXHR对象作为
$.ajaxPrefilter(options,originalooptions,jqXHR)
函数中参数的一部分公开。因此,您只需在prefilter函数
jqXHR.setRequestHeader('CUSTOM-HEADER-KEY','CUSTOM-HEADER-VALUE')中编写代码即可
$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');
        }
    }
});