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

时间:2013-12-03 16:22:45

标签: jquery ajax authentication http-headers xmlhttprequest

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

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

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

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

2 个答案:

答案 0 :(得分:25)

预过滤器是实现此目的的简便方法:

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

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

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

答案 1 :(得分:13)

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

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

演示:Fiddle