2016-11-14 49 views
2

我需要通過角以下GET請求發送。根據這個請求,我有一個rails服務器,它接受param並返回JSON數據。如何序列GET PARAMS用(jQuery的風格)嵌套對象

GET請求所需要的:

http://localhost:8080/clients.json?c[year][]=&c[year][]=2016&c[year][]=2015

角碼迄今:

$http({method: 'GET', url: '/clients.json', params:{???}.success(function(data){ 
     //angular does something  
    }); 

我怎麼會在角當年參數發送,從而使服務器識別c [年] [2016] - 嵌套數組格式?基本上,我將如何正確取代???在提供的代碼中?

+0

你需要將它作爲json數據類型llke'?year = {「time_one」:1479147348,「time_two」:1479147348}發送,然後在GET參數 – KDOT

+0

上使用'json_decode()'你能否澄清關於你期望Rails服務器收到的數據是什麼? – lucasnadalutti

+0

嘗試使用[$ httpParamSerializerJQLike](https://docs.angularjs.org/api/ng/service/$httpParamSerializerJQLike)。 – georgeawg

回答

2

使用$httpParamSerializerJQLike

var myUrl = '/clients.json' 
var myParams = {c: {year: ["2015", "2016"]}}; 

$http({ 
    url: myUrl, 
    method: 'GET', 
    params: myParams, 
    paramSerializer: '$httpParamSerializerJQLike' 
}); 

$httpParamSerializerJQLike服務是遵循jQuery的param()方法邏輯替代$ HTTP PARAMS串行器。

JSON: {"c":{"year":[2014,2015]}} 
Encode: c%5Byear%5D%5B%5D=2014&c%5Byear%5D%5B%5D=2015 
Decode: c[year][]=2014&c[year][]=2015 

DEMO on JSFiddle


,當我運行一些原因:

var myParams = {c: {year: ["","2015","2016"]}}; 
var myParamsString = JSON.stringify(myParams); 
var myParamsSerial = $httpParamSerializerJQLike(myParamsSerial); 

myParamsSerial回來爲空白。有任何想法嗎?

不要字符串化對象:

var myParams = {c: {year: ["","2015","2016"]}}; 
//DONT stringify 
//var myParamsString = JSON.stringify(myParams); 
//var myParamsSerial = $httpParamSerializerJQLike(myParamsSerial); 
//USE directly 
var myParamsSerial = $httpParamSerializerJQLike(myParams); 

的PARAMS串行序列化JavaScript對象,而不是一個JSON字符串。

+0

哇,這太好了。 paramSerializer選項在$ http調用中起作用。出於某種原因,當我運行:'var myParams = {c:{year:[「」,「2015」,「2016」]}}; var myParamsString = JSON.stringify(myParams); var myParamsSerial = $ httpParamSerializerJQLike(myParamsSerial);' - 如你的小提琴 - myParamsSerial返回爲空。有任何想法嗎? – HoosierCoder

+0

可以在此[PLNKR上的DEMO](https://jsfiddle.net/kq7fcqf4/)中正常工作。 – georgeawg

+0

是的,它在PLNKR上完美運行。 – HoosierCoder

0

您希望您的服務器接收這樣的事情在你的GET PARAMS:

{c: {year: ["2015", "2016"]}}

所以,如果您的應用角度發送數據應該是完全以這種格式。因此,這應該工作:

$http({method: 'GET', url: '/clients.json', params: {c: {year: ['2015', '2016']}}.success(function(data){ 
    //angular does something  
}); 
+0

那一個不工作並返回:'http:// localhost:8080/clients.json?c =%7B%22year%22:%5B%222015%22,%222016%22%5D%7D'看起來不是將參數放在[ ] – HoosierCoder

+0

你在Rails服務器上收到了什麼?這是真正重要的。我們應該使用它來調試,而不是URL。 – lucasnadalutti