2017-10-20 1 views
0

Ich mache eine Sicherungsoperation, die, wenn die Daten ungültig sind, die 400 HTTP-Status mit den Details in der JSON-Nachricht ist. Ich mag die JSON lesen, so kann ich es unten angezeigt ist der Code Ich benutze aber nichts scheint zu bekommen eine 400-Fehler KörperreaktionAbruf, 400-Fehler beim Lesen des JSON

private _onSave() { 
    let e: EmployeeSaveEntity = this.state.employeeSave; 
    this._save(e, this._onResponse.bind(this) , this._onCheckError.bind(this)); 
    } 

    public _save(employee: EmployeeSaveEntity, onFulfilled: any, onReject: any) { 
    let url: string = __URL__; 
    url += 'Employees'; 

    let context: any = this; 
    let res: Promise<Response>; 
    try { 
     res = fetch(url, 
      { 
       //"cors" | "navigate" | "same-origin" | "no-cors" 
       //mode:"no-cors", 
       method: "POST", 
       headers: { 
        'Authorization': `Bearer ${context._authentication.token.access_token}`, 
        "Content-Type": "application/json" 
       }, 
       body: employee.getJSON() 
      }).then(onFulfilled, onReject); 
     } 
     catch (error) { 
      throw new Error('Failed to save employee'); 
     }; 
} 

    private _onCheckError(value: any) { 
    console.log('_onCheckError'); 
    console.log(value); 
    } 

    private _onResponse(value: Response) {  
    console.log('_onResponse'); 
    console.log(value); 
    console.log(value.text()); 
    value.json().then(this._onJson.bind(this), this._onCheckError.bind(this)); 
    } 
    private _onJson(value: any) { 

    console.log('_onJson'); 
    console.log(value); 
    } 

HTTP/1.1 400 Bad Request Cache-Control: no-cache Pragma: no-cache Transfer-Encoding: chunked Content-Type: application/json; charset=utf-8 Expires: -1 Date: Fri, 20 Oct 2017 14:50:33 GMT X-Response-From: 10.50.46.29

{"HierId":[ "You can not insert master table data into the system at this hierarchy level." ], "PrimaryPhoneNumberCountryCallingCode":[ "The PrimaryPhoneNumberCountryCallingCode is required when PrimaryPhoneNumber has a value." ] }

+0

Sie sind nicht 'Content-length' in Ihrem Header senden. Das könnte ein Problem sein. Vom RFC, "Anwendungen sollten dieses Feld verwenden, um die Übertragungslänge des Nachrichtenkörpers anzugeben, es sei denn, dies ist durch die Regeln in Abschnitt 4.4 verboten." –

+0

'application/json' hat ** nicht ** einen charset. –

+0

Die content-length wird nicht benötigt, der fetch fügt sie an den Header an. Das alles funktioniert, wenn die Daten stimmen, bekomme ich eine Antwort 200 und alles funktioniert. Was ich wirklich wissen möchte, ist, wie liest du den Körper einer schlechten Bitte. – user1730289

Antwort

0

Da die HTTP-Anforderung erfolgreich war (Sie zu arbeiten bekommen beliebig Antwort) dann wird das Ergebnis nur an onFulfilled Methode übergeben.

Schauen Sie sich das Beispiel:

fetch("/error").then((response) => { 
    console.log(response.status); //400 in your case 
    response.json().then((errorJson) => { 
     console.log(errorJson); // should return the error json 
    }); 
}) 
+0

Das ist ähnlich zu dem Beispiel, das ich verwendet habe, aber mein Status kommt als 0 zurück. Ich muss den Modus hinzufügen: "no-cors", um meine Anfrage zu bekommen, und dann bekomme ich die folgende Nachricht: ** Uncaught (in Versprechen) Syntaxerror: unerwartetes Ende der Eingabe bei eval (eval bei ./components/employee.tsx (app.5319b150089f3650765c.js: 8370), : 233: 26) bei ** – user1730289

+0

@ user1730289 Hinzufügen „-Modus: ' no-cors '"weist Browser an, Ihren Frontend-JavaScript-Code vor jedem Zugriff auf die Antwort zu sperren. – sideshowbarker

+0

K aber ich füge es nicht hinzu Ich bekomme das ** Laden fehlgeschlagen https: // domain/Employees: Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'https: // localhost: 3000' ist daher nicht erlaubt. Die Antwort hatte den HTTP-Statuscode 400. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, setzen Sie den Modus der Anfrage auf 'no-cors', um die Ressource mit deaktiviertem CORS zu laden. ** – user1730289

Verwandte Themen