澄清点:将自定义标头添加到我的jQuery ajax调用中没有任何问题,我想将我的自定义标头自动添加到所有ajax调用中。
如果您看看jquery $.ajax自定义http标头问题(不是我的问题),您将看到一个很好的示例,说明如何为每个ajax调用手动实现代码。
我想为所有jQuery ajax调用覆盖beforeSend。根据jQuery文档,我可以使用jQuery.ajaxSetup()来做到这一点,但有一条警告说您可能不应该这样做,可能会导致意外的行为。对于此类全局回调,他们建议使用.ajaxStart()。 .ajaxStart()看起来不错,但它不公开XHR,因此我可以添加标题。
我应该只使用ajaxSetup添加beforeSend吗?有没有办法从ajaxStart访问XHR?还有其他选择吗?
前置过滤器将是实现此目的的简便方法:
$.ajaxPrefilter(function( options ) { if ( !options.beforeSend) { options.beforeSend = function (xhr) { xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE'); } } });
这样,所有请求都将获得自定义标头,除非特定请求覆盖了beforeSend选项。
但是请注意,您可以使用ajaxSetup实现相同的目标。出现警告的唯一原因是因为使用警告会影响所有ajax请求(就像我的方法一样),如果特定请求不需要该选项集,可能会导致不想要的结果。我建议仅使用ajaxSetup,这毕竟是它的目的。