繁体   English   中英

Angular2 http.post响应未定义

[英]Angular2 http.post response undefined

我面临着无法解决的问题。

我知道

不假设服务器API。 并非所有服务器都返回带有数据属性的对象。

但我根本不知道如何处理。 我应该如何将数据发送到:

  data => this.exercises.push(data), 

如果我的回答是空的? 结果,在页面上,我收到了新的li元素,该元素为空。 我需要怎么做才能查看新记录而无需重新加载页面?

一些代码:

exercises.component.ts

getExercises() {
  this.exercisesService.getExercises()
    .subscribe(
      exercises => this.exercises = exercises,
      error => this.errorMessage = error);
}

TestPost(){
  let exerciseName = {
    "name": "tetstse"
};

this.exercisesService.addExercise(exerciseName)
  .subscribe(
    data => this.exercises.push(data),
    error => console.log(this.errorMessage),
    () => console.log("Finished properly")
  );

  //this.getExercises();
}

exercises.service.ts

getExercises(): Observable<Exercises[]>{
  return this._http.get(this.getExercisesUrl)
    .map((res: Response) => res.json())
    .catch(this.handleError);
}

addExercise(name): Observable<Exercises> {
  let headers = new Headers();
  headers.append('Content-Type', 'application/json');
  let json = JSON.stringify(name);
  return this._http.post(this.addExerciseUrl, json , headers)
    .map(this.extractData)
    .catch(this.handleError)
}



private handleError (error: Response | any) {
  let errMsg: string;
  if (error instanceof Response) {
    const body = error.json() || '';
    const err = body.error || JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
  } else {
    errMsg = error.message ? error.message : error.toString();
  }
  console.error(errMsg);
  return Observable.throw(errMsg);
}

private extractData(res: Response) {
  let body = res.json();
  return body.data || { } ;
}

您可以检查data是否为空,如下所示:

TestPost() {
        let exerciseName = {
            "name": "tetstse"
        };

        let sub = this.exercisesService.addExercise(exerciseName)
            .subscribe(data => {
             console.log(data);
                if (data != null) {
                    data => this.exercises.push(data) // We have something
                }
                else {
                    console.log('No data returned');
                    // Do something else letting the end user know of this.
                }
            },
            err => {
                console.log('we got an error:', err);
            });

        sub.unsubscribe():
    }

我的问题的答案很简单。

private extractData(res: Response) {
  let body = res.json();
  return body || { } ;
}

body.data || {}; 错误

身体|| {}; 正确

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM