Есть ли способ получить все заголовки запросов в вызове jQuery $.ajax?
Я создаю инструмент отладки для запросов 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
.
Ответы
Ответ 1
Короткий ответ - неожиданно, нет.
API XMLHttpRequest не имеет метода для извлечения заголовков отправляемого запроса. См. Также этот вопрос.
Новый объект jqHXR, надмножество собственного XMLHttpRequest браузера, к сожалению, также не реализует его.
.ajaxComplete()
callback получает параметр settings
, который будет содержать ключ headers
, если вы установили его нормальный путь, но не если вы использовали .beforeSend()
для вызова setRequestHeader()
.
Ответ 2
Вы можете использовать "this" в качестве ссылки для текущего запроса ajax, затем получить свойство "принимает" так:
$.ajax({
type: 'POST',
dataType: 'JSON',
url:'ajax.php',
data:my_data_array,
success: function(data) {
console.log(this.accepts);
}
});
Ответ 3
Вы можете использовать объект jqXHR в функции успеха для доступа к заголовкам.
$.ajax({
...
success: function(data, textStatus, jqXHR ){
console.log(jqXHR);
...
}
})
из http://api.jquery.com/jQuery.ajax/