Response headers can contain valuable information and may help to keep your API responses simpler by separating the actual response data from accessory metadata.
For instance, when querying the WordPress JSON API for a list of posts, the response body includes just the posts data but the pagination info it’s sent as headers:
HTTP/1.1 200 OK Access-Control-Allow-Headers: Authorization Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages X-WP-Total: 7 X-WP-TotalPages: 2
Whether you’re using jQuery or just plain Javascript, it’s quite simple to get response headers.
Using jQuery
I’ll keep using the same case of getting a list of posts from the WordPress API.
The jQuery code for the AJAX request would look something like this:
var posts = $.ajax({ type: 'GET' url: '/wp-json/wp/v2/posts/', data: { 'per_page': 10 } });
In jQuery, an AJAX request returns a promise, so after that we could do something like:
posts.done( function( data, textStatus, jqXHR ){ var receiver = $('#posts-receiver'); for ( var i in data ){ receiver.append( data.title.rendered +':'+ data.link ); } var current_page = parseInt( receiver.data('paged'), 10 ), total_pages = parseInt( jqXHR.getResponseHeader('X-WP-TotalPages'), 10 ); if ( curent_page == total_pages ) { $('button#load-more-posts').attr('disabled', 'disabled'); } } );
The jqXHR
object it’s a superset of the native XMLHttpRequest object. It exposes a jqXHR.getResponseHeader()
method for getting a single response header (which it’s always returned as a string) and jqXHR.getAllResponseHeaders()
for getting all of them as a single string.
Using plain javascript
The same getResponseHeader
method is available in plain javascript as part of the XMLHttpRequest object; the only thing that changes it’s the way you create and initiate the request:
var request = new XMLHttpRequest; request.open('GET', '/wp-json/wp/v2/posts', true); request.onload = function(){ // do some stuff var total_pages = parseInt( request.getResponseHeader('X-WP-TotalPages), 10 ); }; request.send();