2016-12-14 2 views
0

Возможно ли каким-либо образом добавить объекты json в объект URLSearchParams?с использованием объектов json в URLSearchParams

Таким образом, вместо:

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

это:

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


Мой ответ любезно ответ Darshak Gajjar в

Можно использовать объекты JSon таким путем:

let test_this = [{"search": "person"}, { search: "another person"}]; 
var json = JSON.stringify(test_this); 
urlSearchParams.append("myobj", json); 

return this.http.post(this.post_url, urlSearchParams, options) //options being your own RequestOptions 

ответ

4

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

Что-то подобное может работать urlSearchParams = Object.assign(urlSearchParams, {search: "person"});

EDIT: Альтернативное решение с использованием ванильного JavaScript. Кроме того, я думал, что URLSearchParams - это просто обычный объект js, но на самом деле вам нужно использовать get, set и append для доступа к свойствам.

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')); 
 

EDIT бис: .append() поддерживает повторно использовать то же имя ключ/параметр, в то время как .set() бы перезаписаны предыдущее значение.

+0

Я попробовал это 'let search = Object.assign (urlSearchParams, {number: '5'}) ;, но он сделал похоже, не работает. –

+0

Я пробовал код, как в хром-консоли, и он работал. с каким браузером вы работаете? 'let' - это новое ключевое слово, поэтому, возможно, попробуйте его с помощью var. Кроме того, метод Object.assign недоступен в IE в соответствии с документацией. – murtuza

+0

проверит его завтра и отметит соответствующим образом. –

2

Может быть, используя ниже код, который вы можете передать весь объект JSON в URL поиска PARAM

var json = JSON.stringify(myObj); 

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

Я на самом деле использую this.http.post, поэтому он не работает для меня :( –

+0

вы также можете использовать post так же, как this.http.post ('url' + '? myobj =' + encodeURIComponent (json)) – Darshak

+0

Если бы я мог отметить два ответа, я бы тоже отметил ваш, но другой ответ лучше подходит для вопрос :( –

1

Там нет API для этого. Вам просто нужно перечислить через свойство и добавить их вручную

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

Хочет поделиться моим ответом на Angular2 с возможностью отправки Array Это, как я использую эту 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 
     }; 
    } 
Смежные вопросы