2016-07-10 19 views
4

Ich versuche fetch Funktion zu verwenden, um Daten vom Server in einem Client-Seite Javascript-Code abzurufen. Und ich benutze die Polyfill-Version von fetch namens whatwg-fetch in einem Chrome (die Fetch intern unterstützt).fetch Antwort ist leer, obwohl die Anfrage erfolgreich war

Hier ist, wie ich die Funktion aufrufen:

//Called in a page loaded as http://localhost:3236/ 
fetch("http://localhost:8080/list", { 
     mode: 'no-cors', 
     credentials: "include", 
    }) 
    .then(function(response) { 
     return response.json(); 
    }); 

Wie Sie meinen Anwendungsserver sehen kann, ist nicht das gleiche wie meine Ressource-Server, damit ich die Optionen für CORS gesetzt hatte. Das Problem ist, dass die response keinen Inhalt bekommen hat:

{ 
    body: null, 
    bodyUsed: false, 
    headers: Headers, 
    ok: false, 
    status: 0, 
    statusText: "", 
    type: "opaque", 
    url: "", 
} 

Es ist in dem Fall, dass, wenn ich drehe Panel zu vernetzen und die Anforderung gesendet zu finden, alles OK Daten mit Status 200 und den gewünschten scheint.

Wie kann ich das Problem finden?

+0

Beachten Sie, dass Chrome leere Antwortdaten anzeigen kann, wenn das erwartete Ergebnis beispielsweise "application/json" lautet, der HTTP-Antworttext jedoch aus irgendeinem Grund nicht analysiert werden kann (z. B. ungültige Formatierung). In solchen Fällen würde ich normalerweise Fiddler öffnen und die rohe Antwort überprüfen. – brendonofficial

+0

Zählt das rohe Antwortfenster von Chrome nicht? Ich kann meine gewünschte Antwort dort sehen. Ich kann es nur in JS nicht erhalten! – Mehran

Antwort

5

Der Schlüssel ist im opaque Schlüssel. Die Anfrage war erfolgreich, aber die CORS-Einschränkungen von Chrome verhindern, dass Sie die zurückgegebenen Daten verwenden können. Die no-cors Option ist verdächtig; Es sollte nicht notwendig sein, wenn Ihr Server korrekt für Anfragen mit Ursprungsüberschreitung konfiguriert ist.

N.B. Wenn Sie alles korrekt konfiguriert haben, aber beim lokalen Testen des Clients Fehler auftreten, reicht es möglicherweise aus, Chrome mit dem Flag --disable-web-security zu starten.

+0

Eine Frage; funktionieren "no-cors" und Serverkonfigurationen nicht synonym? Ich habe das nirgendwo gelesen, aber wenn sie es nicht tun, was bedeutet "no-cors"? – Mehran

+1

@Mehran, ich bin mir nicht ganz klar über den beabsichtigten Anwendungsfall für 'No-Cors', aber die Dokumentation hier explizit besagt, dass JavaScript nicht in der Lage sein wird, die Antwort Payload zu überprüfen: https://developer.mozilla.org/ de-DE/docs/Web/API/Anfrage/Modus – linguamachina