Есть ли способ получить все заголовки запросов в вызове 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/