【问题标题】:Angular return [object Object]角度返回 [object Object]
【发布时间】:2022-01-19 14:27:49
【问题描述】:

我正在尝试发送发布请求。但是 API 返回未定义,我将它发送到我的 API,结果是 [object Object]

getAccouting():Observable<any>{
    // let json = this.http.get<any>('/assets/cities/altayskiy_kray/accounting.json'); if i use it json return undefined
    let json;
    this.http.get('/assets/cities/altayskiy_kray/accounting.json').pipe(data=>json=data);
    let formData:FormData = new FormData;
    formData.append('json', json);
    return this.http.post<any>('http://api/api.php', formData);
  }

如何解决?

【问题讨论】:

  • 如何使用管道请参见第二个答案this.http.get().pipe( mergeMap(response: Response =&gt; this.http.get(response.doSomething()) )switchMap() 运算符的文档也是一个很好的起点 learnrxjs.io/learn-rxjs/operators/transformation/switchmap
  • 克里斯托夫,不,这不是答案,那行不通:(
  • “不起作用”无助于为您提供更好的答案。链接的答案显示了如何进行两个异步 http 调用的基础知识,您确实需要了解基础知识。假设您现在知道如何进行多个 http 调用,那么您的代码现在看起来如何以及究竟是什么不工作?
  • 如果我使用 this.http.get(),则会收到错误“需要 uri 的参数”。如果我添加,如上所述,然后mergeMap抛出错误:“类型参数”(json:ArrayBuffer)=> void“不能分配给类型参数”(值:ArrayBuffer,索引:数字)=> ObservableInput”。类型“void”不能分配给类型“Observable Input”.ts(2345)”,但除此之外我还写了“mergeMap(json=>”

标签: angular typescript rxjs


【解决方案1】:

http.get 是异步的,因此在您返回 http.post 之前它不会发出。因此,json 将是未定义的。

相反,您可以链接它们并返回整个 observable:

getAccouting(): Observable<any>{
  return this.http.get('/assets/cities/altayskiy_kray/accounting.json').pipe(
    switchMap(json => {
      return this.http.post<any>('http://api/api.php', json);
    }
  );
}

你需要使用FormData吗?如果您附加 json 对象,那么您将获得其字符串值:[object Object]

您可以对json 对象进行字符串化,但您必须在服务器上对其进行解码:

formData.append('json', JSON.stringify(json))

【讨论】:

  • 由于某种原因,我现在需要 FormData.append('json', json); 中的 json 变量;
  • 你需要使用FormData吗?
  • 不知道,但是没有它,请求是发不出去的
  • 因此您可以将每个键值从json 对象附加到FormData。或者您可以使用formData.append('json', JSON.stringify(json)),但您必须在另一端对其进行解码。
  • 不客气 - 很高兴它解决了您的问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多