【问题标题】:pass JSON Objects and Arrays as parameters into the Angular 2 http calls将 JSON 对象和数组作为参数传递给 Angular 2 http 调用
【发布时间】:2018-07-06 15:30:35
【问题描述】:

我想将下面的 JSON 对象和数组传递给我的 Angular 5 项目的 HTTP 请求参数。

参数1:

{"param_1":"abc","param_2":"xyz","param_3":"123"}

参数2:

[{"f_key_1":"id1","f_key_2":"12","f_key_3":"xyz1"},{"f_key_1":"id2","f_key_2":"13","f_key_3":"xyz2"}]

通过使用以下代码从对象和数组创建字符串

public updateParam(dataParam: any) {
    let params = new URLSearchParams();
    for (let field in dataParam) {
        if (typeof (dataParam[field]) == 'object' || dataParam[field] instanceof Array) {
            params.set(field, JSON.stringify(dataParam[field]));
        } else {
            params.set(field, dataParam[field]);
        }
    }

    return this.http.patch('param/update', params.toString())
        .map((res: Response) => res.json())
        .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}

我认为这是正确的做法,但它不起作用。原因是,它为 param1 传递 [object Object],为 param2 值传递 [[object Object],[object Object]]。 我可以通过在类似 JSON 的结构中创建字符串并将其作为参数传递来解决它。但这不是执行此操作的标准方法。

有什么标准方法可以解决这个问题吗?

【问题讨论】:

    标签: typescript angular5


    【解决方案1】:

    如下更改if-else 部分。将JSON.stringify 添加到所有变量中:

    if (typeof (dataParam[field]) == 'object' || dataParam[field] instanceof Array) {
        params.set(JSON.stringify(field), JSON.stringify(dataParam[field]));
    } else {
        params.set(JSON.stringify(field), JSON.stringify(dataParam[field]));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-19
      • 1970-01-01
      相关资源
      最近更新 更多