Why are response headers null from CORS AJAX response?

jquery, playframework, playframework-1.x, response-headers

Solution

i'm afraid that most of the browser's (Mozilla,Safari,Chrome) does not yet support `Access-Control-Expose-Headers` so your `getAllReponseHeaders()` 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

Problem

An AJAX request, using jsonp, to an external Play! 1.2.4 application on Heroku, which returns data successfully, returns null on`getResponseHeaders()`. 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!

Original source

Related problems