2016-11-14 42 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