Angular 2 - Http获取请求 - 传递json对象

时间:2016-06-23 14:19:38

标签: javascript http angular

如何进行http get请求并传递json对象

这是我的json-Object

{{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());
  }

5 个答案:

答案 0 :(得分:4)

Http.get方法将实现RequestOptionsArgs的对象作为第二个参数。

该对象的搜索字段可用于设置字符串或URLSearchParams对象。

一个例子:

 // Parameters obj-
 let params: URLSearchParams = new URLSearchParams();
 params.set('firstname', yourFirstNameData);
 params.set('lastname', yourLastNameData);

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

答案 1 :(得分:4)

对于纯javascript:

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

?firstname=peter&lastname=test

并将其附加到网址,因为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请求必须遵守基于this answer的网址限制,建议保留 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;
 }

答案 2 :(得分:1)

也许你想要对json对象进行字符串化

var json = JSON.stringify(myObj);

this.http.get('url'+'?myobj='+encodeURIComponent(json))

答案 3 :(得分:0)

类似于 AngJobs 的,但可能是最新的??不需要调用 encodeURIComponent。这是角度:

const stringifiedParams = JSON.stringify(this.filterParams);
return this.http.get<any[]>(`persons`, {params: {filter: stringifiedParams}});

在服务器节点上使用 JSON.parse 反序列化参数:

filter = JSON.parse(req.query.filter.toString());

答案 4 :(得分:-1)

使用POST请求将对象传递到服务器:

//SERVICE
getMatchedPersons(searchObj: any){
    return this.http.post('url', JSON.stringify(searchObj))
                    .map(res => res.json());
}

然后你可以传递你想要的任何JS对象,并在你的http请求中将它发送到服务器。

getMatchedPersons(searchObj: any){
    this.httpService.getMatchedPersons(searchObj: any).subscribe(
        data =>  this.persons = data,
        error => alert(error);
    );
);