Ответ 1
Сначала вам нужно проверить несколько вещей, чтобы убедиться, что ваша установка верна.
-
Проверьте на стороне сервера, отправляете ли вы надлежащий JSON-кодированный ответ для первого запроса, если ответ правильно сериализован или нет.
-
проверьте, что полезная нагрузка для запроса POST
this.body
уже конвертирована в строку json или нет, если вы отправляете данные json на сервер. Вы должны использоватьJSON.stringify(this.body)
перед отправкой запроса, если вы отправляете данные json. -
вы должны использовать map()/catch() в вашем методе
post()
, чтобы на самом деле отобразить ответ и поймать фактическую ошибку.
Итак, ваш код должен выглядеть ниже
MyService.ts:
doPost(body:any): Observable<Response> {
let payload = JSON.stringify(body); // Stringify payload if you are using JSON data
let headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON for json request
let options = new RequestOptions({ headers: headers }); // Create a request option
return this.http.post(this.resourceUrl, payload,options)
.map((res:Response) => res.json()) // ...and calling .json() on the response to return data
.catch((error:any) => Observable.throw(error.json().error || 'Server error')); //...errors if any;
}
MyComponent.ts:
handleClickPost() {
this.myService.doPost(this.body)
.subscribe(
(res: any) => {
this.responseOk = true;
},
(err: any) => {
// Log errors if any
console.log(err);
}
}
);
}
или вы можете создать отдельный обработчик ошибок для метода catch()
, как показано ниже
private handleError(error: any) {
let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.log(errMsg); // log to console instead
return Observable.throw(errMsg);
}
и используйте его таким образом .catch(this.handleError)
в своем классе обслуживания.