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

时间:2012-02-01 19:51:19

标签: 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: ???  

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

对于Referer,使用window.url是否安全,还是可能是其他内容?

我不知道如何获取Accept-*Connection值。

3 个答案:

答案 0 :(得分:8)

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

XMLHttpRequest API没有办法检索即将发送的请求的标头。另请参阅this question

新的jqHXR object, a superset of the browser's native XMLHttpRequest,遗憾的是也没有实现。

.ajaxComplete() callback确实会获得一个settings参数,如果您已将其设置为正常方式,则该参数将包含headers密钥,但如果您已使用{{}} {3}}致电.beforeSend()

答案 1 :(得分:3)

你可以使用"这个"作为当前ajax请求的参考,然后获取属性"接受"像这样:

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

答案 2 :(得分:-6)

您可以使用success函数中的jqXHR对象来访问标题。

$.ajax({
...
success: function(data, textStatus, jqXHR ){
console.log(jqXHR);
...
}
})

来自http://api.jquery.com/jQuery.ajax/