2016-12-14 66 views
0

是否有可能以某种方式将json对象附加到URLSearchParams对象上?在URLSearchParams中使用json对象

所以不是:

urlSearchParams.append('search', 'person'); 

是:

urlSearchParams.append({search: "person"}); 


我的回答Darshak号Gajjar的回答礼貌

可以通过这种方式使用JSON对象:

使用JavaScript的香草替代的解决方案:

回答

4

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

像这样的东西可能会奏效urlSearchParams = Object.assign(urlSearchParams, {search: "person"});

编辑。另外,我认为URLSearchParams只是一个普通的js对象,但实际上你必须使用get,setappend来访问属性。

var params = new URLSearchParams("a=apple&b=balloon"); 
 
var parametersToAdd = {c: "car", d: "duck"}; 
 
for(key in parametersToAdd) 
 
    params.append(key, parametersToAdd[key]); 
 

 
console.log(params.get('c')); 
 
console.log(params.get('d')); 
 

编辑二: .append()支持重新使用相同的密钥/参数名称,而.set()会覆盖前一个值。

+0

我试过这个'let search = Object.assign(urlSearchParams,{number:'5'});'但它没有似乎没有工作。 –

+0

我在Chrome控制台中尝试了类似的代码,它工作。你在用什么浏览器? 'let'是一个更新的关键字,所以也许只用var来试试。此外,Object.assign方法在IE中不可用,因为文档 – murtuza

+0

将在明天尝试并根据需要标记 –

2

可能是使用下面的代码,你可以在URL搜索PARAM

var json = JSON.stringify(myObj); 

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

我实际上使用this.http.post,所以它不适用于我:( –

+0

你也可以用同样的方式使用post.http.post('url'+'?myobj ='+ encodeURIComponent(json)) – Darshak

+0

如果我可以标记两个答案,我会标记你的,但另一个答案更适合于问题:( –

1

有没有API为整个传递JSON对象。你只需要枚举的属性和手动添加它们

function appendParams(params: URLSearchParams, obj: any) { 
    for (let key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     parmas.append(key, obj[key]) 
    } 
    } 
} 

appendParams(urlSearchParams, { search: 'person' }); 
+0

是否可以发送一个数组? –

1

想与发送Array 的选项分享我的答案Angular2这是我如何使用这个get功能:

this.get('/api/database', { 
    'age': [1,2,3,4] 
}) 

和服务是这样的:

get(url, _params = {}) { 
    let params = this._processParams(_params); 

    return this.http.get(url, params).toPromise(); 
} 

_processParams(obj: any) { 
     /* Convert this 
      { age: [1,2,3] } 
      To: 
       param.append('age', 1); 
       param.append('age', 2); 
       param.append('age', 3); 
     */   
     let params = new URLSearchParams(); 

     for (let key in obj) { 
      for (let index in obj[key]) {     
       params.append(key, obj[key][index]); 
      } 
     } 

     return { 
      search: params 
     }; 
    }