2014-01-24 3 views
6

Ich verwende einen jQuery-Ajax-Aufruf, um Daten von einem Server anzufordern, der ein ETag in den HTTP-Antwortheadern sendet. Ich brauche Zugriff auf den Header, aber wenn die Anfrage erfolgreich ist und ich jqXHR.getAllResponseHeaders() aufrufen, sehe ich nur eine Teilmenge der vom Server zurückgegebenen Header.Zugriff auf ETag-Header mit jQuery AJAX-Anfrage?

Beispiel:

var jqXHR = $.ajax({ 
     type: 'GET', 
     url: <my api url>, 
     dataType: 'json', 
     ifModified: true, 
     success: function (result) { 
      var headers = jqXHR.getAllResponseHeaders(); 
      console.log(JSON.stringify(headers)); 
     }); 

Die Header I vom jqxhr sehen sind:

Pragma: no-cache\r\n 
Last-Modified: Wed, 22 Jan 2014 10:45:14 +0000\r\n 
Content-Type: text/html\r\n 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, no-cache=\"set-cookie\"\r\n 
Expires: Sat, 26 Jul 1997 05:00:00 GMT\r\n 

Die tatsächlichen Header vom Server zurückgegeben (in Chrom dev Werkzeuge beobachtet):

Access-Control-Allow-Origin:* 
Cache-Control:no-cache="set-cookie" 
Cache-Control:post-check=0, pre-check=0 
Cache-Control:no-store, no-cache, must-revalidate 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Length:407 
Content-Type:text/html 
Date:Fri, 24 Jan 2014 20:27:54 GMT 
ETag:"29d8d1d98115057fe902b520199ea1b3" 
Expires:Sat, 26 Jul 1997 05:00:00 GMT 
Last-Modified:Thu, 23 Jan 2014 07:14:57 +0000 
Pragma:no-cache 
Server:nginx/1.1.19 
Set-Cookie:AWSELB=F3E9557318EB956CA386FC6CB4270164AD7830493699A2B6AED008F4C5F9DB5952A2A1072C33DDC32DEDE0CA6A3734EBAFD51B57A7A093B69A36A6659EF493E1B92BA63DE6;PATH=/ 
X-Powered-By:PHP/5.4.19 

Ich muss auf den ETag-Header zugreifen, aber es scheint, als würde jQuery oder chrome es vor mir verbergen. Ich habe den gleichen Code in Firefox mit den gleichen Ergebnissen versucht. Kann mir jemand dabei helfen?

Antwort

4

können Sie versuchen, Header in vollständigen Rückruf Zugriff statt Erfolg

complete: function(XMLHttpRequest, textStatus){ 
    var eTag = XMLHttpRequest.getResponseHeader('ETag'); 
} 

Dies ist für einige Benutzer here

+1

Gerade versucht diese, Kein eTag dort auch. – Swaraj

1

Dies könnte ein CORS Problem scheint zu funktionieren. Ich hatte das gleiche Problem, ich sah die Header in Chrome - aber mein Code konnte nicht darauf zugreifen.

ich ASP.Net Web-API für mein Back-End haben und unter dem <system.webServer> Knoten hinzufügen musste:

<httpProtocol> 
    <customHeaders> 
      <add name="Access-Control-Expose-Headers" value="ETag, Retry-After"/> 
    </customHeaders> 
</httpProtocol> 

ich dies realisiert die folgenden Post nach der Lektüre: Etag header not returned from jQuery.ajax() cross-origin XHR