52

How do we get access to the response headers when we fire an ajax request using jQuery? I tried with the below code as per the suggestions given in some sites. But xhr object is coming as null. I see an xhr object in this context. But it doesn't have methods to access response headers.

function SampleMethod() {
  var savedThis = this;
  this.invokeProcedure = function(procedurePath) {
    $.ajax({
      type: "GET",
      url: procedurePath,
      dataType: "json",
      success: function(data,status,xhr) savedThis.resultSetHandler(data,status,xhr);}
    });
  }

  this.resultSetHandler=function(data,status,xhrObj){
    //Handle the result
  }

  this.errorHandler = function(args) {
    //Handle the result
  }

}

var sampleObj = new SampleMethod();
sampleObj.invokeProcedure('url');
Dan Atkinson
  • 11,391
  • 14
  • 81
  • 114
Apps
  • 3,284
  • 8
  • 48
  • 75

2 Answers2

94

For backward compatibility with XMLHttpRequest, a jqXHR object will expose the following properties and methods: getAllResponseHeaders() and getResponseHeader(). From the $.ajax() doc : http://api.jquery.com/jQuery.ajax/

For jQuery > 1.3

success: function(res, status, xhr) { 
  alert(xhr.getResponseHeader("myHeader"));
}
odupont
  • 1,946
  • 13
  • 16
  • 2
    getAllResponseHeaders() gives only content-length: 0 content-type: text/html; charset=UTF-8 but in Chrome Network I see Access-Control-Allow-Credentials: fa... ... Access-Control-Allow-Origin: https://sho... Access-Control-Max-Age: 1728... Connection: keep-alive Content-Length: 0 Content-Security-Policy: frame-ancestors 'none' Content-Type: text/html; charset=UT Refresh: 0; url=https://sec... Server: nginx/1.1... Set-Cookie: lang=ru; ... fnd more. I need Refresh but can't get it – maxkuku Mar 18 '21 at 11:43
  • Same as above comment, doesn't work, only content-type and content length is available – Illegal Operator Feb 14 '23 at 21:05
4

FOR JQUERY 3 AND LATER

Here is the solution that worked for me:

//I only created this function as I am making many ajax calls with different urls and appending the result to different divs
function makeAjaxCall(requestType, urlTo, resultAreaId){
  var jqxhr = $.ajax({
    type: requestType,
    url: urlTo
  });

  //this section is executed when the server responds with no error 
  jqxhr.done(function(){
  });

  //this section is executed when the server responds with error
  jqxhr.fail(function(){
  });

  //this section is always executed
  jqxhr.always(function(){
    //here is how to access the response header
    console.log("getting header " + jqxhr.getResponseHeader('testHeader'));
  });
}
Dharman
  • 30,962
  • 25
  • 85
  • 135
sticky_elbows
  • 1,344
  • 1
  • 16
  • 30