An AJAX request, using jsonp, to an external Play! 1.2.4 application on Heroku, which returns data successfully, returns null ongetResponseHeaders().
Here is my code:
var ajaxresult;
ajaxresult = $.ajax({
'complete': function (jqXHR, status) {
console.log('Complete!');
console.log(status);
console.log("on compelte: " + jqXHR.getAllResponseHeaders());
},
'dataType': "jsonp",
'error': function (jqXHR, status, error) {
console.log('Error!');
console.log(status);
console.log(error);
console.log("on error: " + jqXHR.getAllResponseHeaders());
},
'success': function (data, status, jqXHR) {
console.log('Success!');
console.log(status);
console.log(data);
console.log("on success: " + ajaxresult.getAllResponseHeaders());
console.log("on success(2): " + jqXHR.getAllResponseHeaders());
},
'type': 'GET',
'url': url + "findAllSpecials"
});
If I dump the contents of jqXHR, I get:
"readyState: 4","setRequestHeader: function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this}","getAllResponseHeaders: function(){return s===2?n:null}","getResponseHeader: function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c}","overrideMimeType: function(a){s||(d.mimeType=a);return this}","abort: function(a){a=a||\"abort\",p&&p.abort(a),w(0,a);return this}","done: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","fail: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","progress: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","state: function(){return e}","isResolved: function(){return!!i}","isRejected: function(){return!!i}","then: function(a,b,c){i.done(a).fail(b).progress(c);return this}","always: function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this}","pipe: function(a,b,c){return f.Deferred(function(d){f.each({done:[a,\"resolve\"],fail:[b,\"reject\"],progress:[c,\"notify\"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+\"With\"](this===i?d:this,[g])}):i[a](d[e])})}).promise()}","promise: function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}","success: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","error: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","complete: function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this}","statusCode: function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this}","status: 200","statusText: success"]
The response headers as seen in Opera and Firefox are:
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: text/plain; charset=utf-8
Server: Play! Framework;1.2.4;prod
Set-Cookie: PLAY_FLASH=;Expires=Fri, 5-Oct-12 12:47:15 GMT;Path=/
Set-Cookie: PLAY_ERRORS=;Expires=Fri, 5-Oct-12 12:47:15 GMT;Path=/
Set-Cookie: PLAY_SESSION=...
Content-Length: 1290
Connection: keep-alive
Why is is that using getAllReponseHeaders() returns null when the browser can see the headers? Does cross domain requests prevent response headers from being sent to the AJAX response?
All help is welcome.
Thanks!
i’m afraid that most of the browser’s (Mozilla,Safari,Chrome) does not yet support
Access-Control-Expose-Headersso yourgetAllReponseHeaders()will not work..its been raised as a bug in mozilla firefox forums. But recently they have a fix here is the link you can check it out This