2016-07-22 13 views
0

So versuche ich diesen Beitrag Anfrage zu machen, folgende aurelia docs: http://aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/http-services/3Aurelia | json parsen nicht behebbare Ausnahme?

Und das ist die Anfrage:

httpClient.configure(config => { 
     config 
      .withBaseUrl(baseUrl) 
    }); 
this.client = httpClient; 
this.client.fetch(`/api/Register/${userName}`, { 
      method: "post", 
      body: json(loginInformation), 
      headers: { 
       'Access-Control-Allow-Origin' : '*', 
       'Accept': 'application/json' 
      } 
     }) .then(response => this.safelyParseJSON(response)) 
      .then(data => this.setup(data)); 

wo safetyParseJSON ist:

safelyParseJSON(response) { 
     var parsed 
      try { 
       parsed = response.json(); 
      } catch (e) { 
      } 

     return parsed 
    } 

aber ich empfangen halten Dieser Fehler:

"uncaught (in promise) SyntaxError: Unexpected end of JSON input"

Wer hat eine Idee, was mache ich falsch?

Hinweis: Ich erhalte diesen Fehler nur beim Empfangen von 404/500 vom Server, wenn die Ergebnisse in Ordnung sind, funktioniert dies.

Anmerkung2: dass ich diese Funktion in try-catch umschließe, aber das funktioniert immer noch nicht, es fängt nicht die Ausnahme.

Note3: Ich habe versucht, diese Linie zu ersetzen:

parsed = response.json(); 

mit dieser Zeile:

parsed = JSON.parse(response); 

Aber als die Antwort ist immer undefiniert.

+0

Wie sieht der zurückgegebene JSON aus? Überprüfen Sie Ihre Netzwerkregisterkarte in Ihren Entwicklungstools. –

Antwort

1

Ich landete:

.then(response => { 
if (response.ok && response.status === 200) { 
    return response.json().then(data => this.setup(data)); 
} 
return Promise.reject(response.text()); 
}); 

Zugabe der Response.Status Prüfung notwendig war, in meiner case as response.ok galt auch für den Statuscode 204 (Kein Inhalt).

+0

Ich würde persönlich keinen Fehler auf einen 204 Response-Status werfen, das ist normalerweise eine DELETE-Methode und keine schlechte Antwort, aber eine gute, die keine Informationen enthält. – Randy

2

Überprüfen Sie den Status der Antwort vor .json() Aufruf: mit Jeremy Danyow Antwort, mit einer kleinen Änderung

.then(response => { 
    if (response.ok) { 
    return response.json().then(data => this.setup(data)); 
    } 
    return Promise.reject(response.text()); 
});