2015-03-02 4 views
26

Mein Server gibt diese Art von Header: Content-Range:0-10/0:Wie Antwort Header in angularjs lesen?

enter image description here

Ich habe versucht, diesen Header in Winkel ohne Glück zu lesen:

var promise = $http.get(url, { 
    params: query 
}).then(function(response) { 
    console.log(response.headers()); 
    return response.data; 
}); 

die

Object {content-type: "application/json; charset=utf-8"} 

gerade druckt Irgendwelche Ideen, wie man auf den Header des Inhaltsbereichs zugreift?

Antwort

30

Verwenden Sie die headers Variable in Erfolg und Fehler Rückrufe

From documentation.

Wenn Sie in derselben Domäne sind, sollten Sie die Antwortheader zurück abrufen können. Wenn domänenübergreifend, müssen Sie Access-Control-Expose-Headers Header auf dem Server hinzufügen.

Access-Control-Expose-Headers: content-type, cache, ... 
+0

Dieses noch mich nicht geben Sie die Antwort-Header, sondern nur die Request-Header. –

+0

Die Antwort wurde aktualisiert. –

+0

Ich habe Cross-Domain bereits aktiviert. Der Screenshot in meiner Frage zeigt, dass der Header des Inhaltsbereichs innerhalb der Antwort im Chrome-Inspektor liegt. Also der Server ist nicht das Problem. –

9

aktualisiert basierend auf Mohammeds Antwort ...

$http.get('/someUrl'). 
    success(function(data, status, headers, config) { 
    // this callback will be called asynchronously 
    // when the response is available 
    console.log(headers()['Content-Range']); 
    }) 
    .error(function(data, status, headers, config) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 
22

Warum nicht einfach:

var promise = $http.get(url, { 
    params: query 
}).then(function(response) { 
    console.log('Content-Range: ' + response.headers('Content-Range')); 
    return response.data; 
}); 

Vor allem, wenn man die promise so könnte es sein, ein Teil zurückkehren wollen von eine Versprechungskette.

+2

Geben Sie eine (+1) weil 'Antwort' hat eine' headers() 'Methode, die einen' name' Parameter. Dies ist jedoch mein Problem; Ich kann 'Authorization' -Header [oder irgendwelche anderen] nicht über' response.headers ('Authorization') abrufen, auch wenn ich 'response.config.headers ['Authorization']' in Sichtweite sehen kann !!! Was ist die Welt ist diese Funktion für dann ??? – Cody

+0

Ist es eine domänenübergreifende Anfrage? –

+0

Sie sollten wahrscheinlich nicht mit der A uthorization in einer einzigen Anfrage wie dieser arbeiten. Verwenden Sie einen Interceptor für Authorization Zeug –

5

Zusätzlich zu Eugene Retunsky Antwort unter Angabe von $http Dokumentation in Bezug auf die Antwort:

Das Response-Objekt hat folgende Eigenschaften:

  • Daten-{string|Object} - Antworttext mit dem transformierten Funktionen transformieren.

  • Status - {number} - HTTP-Statuscode der Antwort.

  • Header - {function([headerName])} - Header-Getter-Funktion.

  • Konfig - {Object} - Das Konfigurationsobjekt, das zum Generieren der Anforderung verwendet wurde.

  • statusText - {string} - HTTP-Statustext der Antwort.

Bitte beachten Sie, dass das Argument, Rückruf, um für $resource (v1.6) ist nicht dasselbe wie oben:

Success Rückruf mit (value (Object|Array), responseHeaders (Function), status (number), statusText (string)) Argumenten aufgerufen wird, wobei der Wert der besiedelten Ressourceninstanz oder Sammelobjekt. Der Fehlerrückruf wird mit dem Argument (httpResponse) aufgerufen.

0

Die Antwortheader im Falle von Kors bleiben verborgen. Sie müssen in Antwortheadern hinzufügen, um das Angular zu leiten, um Kopfzeilen zu Javascript freizugeben.

// From server response headers : 
header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
header("Access-Control-Allow-Headers: Origin, X-Requested-With, 
Content-Type, Accept, Authorization, X-Custom-header"); 
header("Access-Control-Expose-Headers: X-Custom-header"); 
header("X-Custom-header: $some data"); 

var data = res.headers.get('X-Custom-header'); 

Quelle: https://github.com/angular/angular/issues/5237