【问题标题】:Why the Http Post Response is different in Console and Network response tab?为什么控制台和网络响应选项卡中的 Http Post Response 不同?
【发布时间】:2018-01-22 05:39:36
【问题描述】:

我正在研究 angular2,我遇到了 HTTP 后响应问题。我的端点应该返回布尔值并在 chrome 的网络响应选项卡中正确返回响应,但是当我在控制台中记录响应时,它会显示空对象。我无法弄清楚为什么网络和控制台选项卡中的响应不同。 这是我的代码:

this._buybackApi.checkValueUnique(checkValueData, CheckValueFormData).subscribe(
    (response) => {
        console.log(response);
        this.checkUniqueRes = response;
    },
    (error) => {
        console.log(error);
    },
    () => {
        console.log(this.checkUniqueRes);
    }
);

Code in api file:

public checkValueUnique(uniqueValue: models.UniqueValue, extraHttpRequestParams?: any): Observable<boolean> {
    return this.checkValueUniqueWithHttpInfo(uniqueValue, extraHttpRequestParams)
        .map((response: Response) => {
            if (response.status === 204) {
                return undefined;
            } else {
                return response.json() || {};
            }
        });
}
public checkValueUniqueWithHttpInfo(uniqueValue: models.UniqueValue, extraHttpRequestParams?: any): Observable<Response> {
    const path = this.basePath + '/IsValueUnique';

    let queryParameters = new URLSearchParams();
    let headers = new Headers(this.defaultHeaders.toJSON()); 
    // verify required parameter 'uniqueValue' is not null or undefined
    if (uniqueValue === null || uniqueValue === undefined) {
        throw new Error('Required parameter uniqueValue was null or undefined when calling checkValueUnique.');
    }
    // to determine the Content-Type header
    let consumes: string[] = [
        '*/*'
    ];

    // to determine the Accept header
    let produces: string[] = [
        'application/json'
    ];

    // authentication (basicAuth) required
    // http basic authentication required
    if (this.configuration.username || this.configuration.password) {
        headers.set('Authorization', 'Basic ' + btoa(this.configuration.username + ':' + this.configuration.password));
    }    

    let requestOptions: RequestOptionsArgs = new RequestOptions({
        method: RequestMethod.Post,
        headers: headers,
        body: extraHttpRequestParams         
    });

    if (extraHttpRequestParams) {
        requestOptions = (<any>Object).assign(requestOptions, extraHttpRequestParams);
    }

    return this.http.request(path, requestOptions);
}

任何帮助将不胜感激。

【问题讨论】:

  • 你能把你的函数体 checkValueUnique(checkValueData, CheckValueFormData) 贴出来吗?
  • @SamanGholami 刚刚更新了我对 checkValueUnique() 的问题

标签: angular http-post response


【解决方案1】:

根据您提供的信息,checkValueUnique 的退货声明将打印以下三个值之一:

  1. undefined 如果是 204 响应状态码。
  2. 响应正文(如果它是有效的 JSON 对象)。
  3. 如果 response.json() 未定义,则为空对象 {}

您收到 {} 是因为对 response.json() 的调用未定义。你说响应返回一个布尔值。响应正文中的布尔值(true 或 false)不是有效的 JSON。

【讨论】:

  • 谢谢@Brad,帮了大忙。
猜你喜欢
  • 2011-06-17
  • 2019-11-20
  • 2020-01-08
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 2018-04-29
  • 2020-01-05
  • 1970-01-01
相关资源
最近更新 更多