【问题标题】:Http post response issue in Angular 8Angular 8 中的 Http 发布响应问题
【发布时间】:2019-12-20 15:01:03
【问题描述】:

我正在尝试将服务器响应内容下载为 csv。在做同样的事情时,我遇到了 2 个错误。

方法如下:

generateCsv(exportModel: any) {
    let headers={};
    return this.http.post<any>(ReportConstant.exportApi, exportModel,
        { observe:"response",responseType: 'blob'})
} 

错误:

src/app/components/export/_services/export.service.ts(22,91) 中的错误:错误 TS2322:类型“响应”不可分配给类型 '“身体”'。

src/app/components/export/_services/export.service.ts(22,110):错误 TS2322:类型“blob”不可分配给类型“json”。

我对前端技术非常陌生。请建议我解决问题的解决方案。

【问题讨论】:

  • 为什么要使用 POST 调用来获取数据?它应该是一个 GET。还有exportModel的类型是什么?
  • 你能试试把responseType: 'blob'改成responseType: 'blob' as 'json'吗?
  • 让 headers = data.headers;让 contentDisposition= headers.get('content-disposition'); let filename = contentDisposition.split(';')[1].split('filename')[1].split('=')[1].trim();
  • 这是我在尝试添加 responsetype 时出现错误的区域:'blob' as 'json'。
  • @Arcteezy : 你能提供 Angular 8 GET 方法的语法吗?

标签: angular angular8


【解决方案1】:
     return  this.httpClient.post(url,
            body,
            {
                headers: new HttpHeaders({
                    'Content-Type': 'application/json'
                }),
                observe: 'response',
                responseType: 'blob'
            }
        );

【讨论】:

    【解决方案2】:

    你使用 POST API(Http Client) 的方式不对

    如果您要向服务器传递更多数据,请使用 POST 否则 GET 应该完成这项工作

    发布: 如果您有疑问,请导入 statemenet

    import {HttpClient, HttpHeaders, HttpParams, HttpParameterCodec} from "@angular/common/http";
    

    在你的构造函数中添加这个

    private httpClient: HttpClient
    

    代码开始:

    let body = new HttpParams({encoder: new CustomEncoder()});
    body = body.append('args', 'stringArguments')); //Add needed arguments
    
    //Set header and response types
    
    let options= {
          headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'),
          responseType:'text' as 'json'
        };
    
    // This will return a promise(observable) which can be called utilized as 
    // observableReturn.subscribe(response => this.ProcessAsyncResponse(response), error => this.HandleSRProcessError(error, this.serviceRequestCallList));
    
    return this.httpClient.post(ajaxUrl, body, options)
    

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 1970-01-01
      • 2020-10-22
      • 2020-08-20
      • 2019-07-18
      • 2015-11-11
      相关资源
      最近更新 更多