澄清点:在我的jQuery ajax调用中添加自定义标题没有任何问题,我想自动将我的自定义标头添加到所有的ajax调用中.
如果你看看jquery $.ajax custom http headers issue(不是我的问题),你会看到一个很好的例子,说明如何为每个ajax调用手动实现代码的工作原理.
我想覆盖beforeSend所有jQuery ajax调用.根据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,这就是它在那里.