Bra*_*lly 18 javascript ajax jquery
我正在编写一个JS脚本,该脚本位于一个系统中,该系统现在通过jQuery.ajaxPrefilter()注册的函数中的jqXHR.setRequestHeader()向所有Ajax请求添加自定义XID头.
在我的脚本中,我需要向第三方站点发出Ajax请求,其Access-Control-Allow-Headers未设置为允许此自定义XID标头.
看来我有3个选择:
选项#1是首选,如果有一个简单的方法,因为它将是最干净和最快的路线.只是无法弄清楚如何.
我试过像这样覆盖它,但它不起作用:
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我意识到这是一个旧线程,但它仍然是一个问题!希望以下内容将有助于为其他人解决问题,就像为我们解决问题一样。
设置一个头null/ undefined/""它已经不集后不删除它,它发出的头还在,但与不用值或“不确定”或“空”。这可能永远不是你想要的,在我们的例子中,当它是 Authorization 标头时,完全搞砸了 SSO。
我们提出的解决方案依赖于@marlar 的建议(谢谢)和 jQuery 的另一个不足:你只能有一个beforeSend()钩子,任何新的钩子都会替换前一个。如果您beforeSend()在特定$.ajax()请求中提供 a 似乎也是如此- 它会覆盖$.ajaxSetup(). 通过这样做,您可以防止默认挂钩设置标头。(这不是 100% 理想的,因为在默认情况下可能会完成其他beforeSend()不会发生的事情,但是嘿)。
因此,这可以处理特定请求的静态和动态设置的标头:
if($.ajaxSettings && $.ajaxSettings.headers) {
delete $.ajaxSettings.headers.Authorization;
}
$.ajax({
beforeSend: function() {}, // no op
// ...
});
Run Code Online (Sandbox Code Playgroud)
你不能对 做同样的事情prefilter(),但我认为beforeSend()无论如何这是更常见的方法。
小智 2
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
})
Run Code Online (Sandbox Code Playgroud)
请参阅http://api.jquery.com/jQuery.ajaxSetup/
| 归档时间: |
|
| 查看次数: |
16771 次 |
| 最近记录: |