我正在为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
值。
答案 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);
...
}
})