我正在写一个JS脚本,它生活在一个系统中,该系统现在通过jQuery.ajaxPrefilter()中注册的函数中的jqXHR.setRequestHeader()向所有Ajax请求添加自定义XID标头。有什么办法可以删除由setRequestHeader()设置的Ajax头?
在我的脚本中,我需要向第三方站点发出Ajax请求,该站点的Access-Control-Allow-Headers未设置为允许此自定义XID标头。
看来我有3种选择:
- 找到一个方法来删除$就在于XID头()的beforeSend功能,我已经证实了ajaxPrefilter()函数之后被调用。
- 完全放弃使用$ .ajax(),而只是自己编写Ajax。
- $ .ajax()指向系统的后端,它接受定制的XID头,并通过cURL向第三方站点执行请求。
选择#1是首选,如果有一个简单的方法来做到这一点,因为它将是最干净和最快的路线。只是想不通如何。
我试图重写它这样,但它没有工作:
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
任何想法?
很确定这是不可能的(不幸的是)。我觉得这很容易克服,但需要通过jQuery进行更改。 'jqXHR'是一个真正的'XMLHttpRequest'的包装对象。所有jQuery需要做的就是跟踪任何额外的/自定义的头文件(比如在一个Object中),并且使用像removeHeader和setHeader这样的方法来修改这个Object。然后,当真正的请求被创建并发送时,该对象将被用于*实际*添加请求头部到真实请求。我想根据真实的工作流程/生命周期内部,它可能会也可能不会是可能的 – Ian
大鼠,这就是我所害怕的。 –
是的,它看起来像设置值为'空'或'“”只是设置一个空值...不删除整个标题。将功能请求提交给jQuery可能不是一个好主意。并以此为例。再次,它可能会也可能不会取决于内部生命周期 – Ian