Angular 2 - Http Get 请求 - 传递 json 对象

新手上路,请多包涵

我怎样才能做一个http get请求并传递一个json对象

这是我的 json 对象

{{firstname:"Peter", lastname:"Test"}

我想在 http 请求中传递此对象以获取匹配人员列表。

这怎么可能?此示例仅显示一个带有 json 结果的简单 get 请求。我该如何修改它?

 //Component:

person:Person;
persons:Person [];
....
//Whre can I pass the person, here in the service??
getMatchedPersons(){
  this.httpService.getMatchedPersons().subscribe(
     data =>  this.persons = data,
    error => aller(error)
    );
 );


  //SERVICE
  //pass parameters?? how to send the person object here?
  getMatchedPersons(){
    return this.http.get('url').map(res => res.json());
  }

原文由 hamras 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 405
1 个回答

对于纯 JavaScript:

您必须将 json 序列化为参数列表:

 ?firstname=peter&lastname=test

并将其附加到 URL,因为 GET 请求没有正文。

有几种方法可以将 JSON 转换为 QueryParameters。他们在这个问题中得到解决: Is there any native function to convert json to url parameters?

在那里你可以选择你喜欢的毒药,我的是:

 function obj_to_query(obj) {
    var parts = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
        }
    }
    return "?" + parts.join('&');
}

但请注意 GET 请求必须遵守基于 此答案 的 URL 限制,建议保持在 2000 个字符以下以确保安全:

RFC 说 8000

IE8 和 IE9 最高可达 2083

搜索引擎只能读取到 2048

使用 Angular2 URLSearchParams

使用将纯 JSON 转换为参数的相同方法,可以使用 URLSearchParams 正如 Рома Скидан 所建议的:

  let params: URLSearchParams = objToSearchParams(obj);

 return this.http.get('url', {
   search: params
 }).subscribe(
   (response) => //some manipulation with response
 );

 function objToSearchParams(obj): URLSearchParams{
    let params: URLSearchParams = new URLSearchParams();
    for (var key in obj) {
        if (obj.hasOwnProperty(key))
            params.set(key, obj[key]);
    }
    return params;
 }

原文由 SparK 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题