有没有办法在jQuery $ .ajax调用中获取所有请求标头?

gre*_*mac 16 jquery http-headers

我正在为AJAX请求构建一个调试工具,我想显示请求/响应头(就像Firebug一样).我可以使用jqXHR.getAllResponseHeaders获取响应头,但请求头是否等效?


如果没有,我知道我可以自己重建一下:

GET /blah  // this part is easy
Host: servername.com  // pretty easy
Accept:  ???
Referer: ??? // just use current page url?
User-Agent:  // easy from navigator.userAgent
X-Requested-With: XMLHttpRequest   // hardcoded, $.ajax always does this?
Accept-Charset: ???
Accept-Encoding: ??? 
Accept-Language: ???
Connection: ???  
Run Code Online (Sandbox Code Playgroud)

我最关心的是Accept.似乎浏览器或其他东西正在改变这一点,因为我正在设置 $.ajax({dataType:'json'})并且在我看到的萤火虫中Accept application/json, text/javascript, */*; q=0.01.我希望能够捕获正在发送的实际标头.

因为Referer,使用window.url是安全的,还是可能是其他东西?

我不知道如何得到Accept-*Connection值.

Dan*_*scu 8

简短的回答 - 令人惊讶的是,没有.

XMLHttpRequest的API不必检索有关发送请求的报头的方法.另见这个问题.

遗憾的是,新的jqHXR对象是浏览器的原生XMLHttpRequest的超集,但也没有实现.

.ajaxComplete()回调确实得到了settings其中将包含参数headers键,如果你已经设定,以正常的方式,但如果你已经使用.beforeSend()调用setRequestHeader().


小智 5

您可以使用“this”作为当前ajax请求的参考,然后像这样获取属性“accepts”:

    $.ajax({
                type: 'POST',
                dataType: 'JSON',
                url:'ajax.php',
                data:my_data_array,
                success: function(data) {
                    console.log(this.accepts);
                }
           });
Run Code Online (Sandbox Code Playgroud)