我需要通过Angular发送以下get请求。根据此请求,我有一个rails服务器,它接收param并返回JSON数据。
需要GET请求:
到目前为止http://localhost:8080/clients.json?c[year][]=&c[year][]=2016&c[year][]=2015
Angular代码:
$http({method: 'GET', url: '/clients.json', params:{???}.success(function(data){
//angular does something
});
我如何在Angular中发送年份参数,以便服务器识别c [year] [2016] - 嵌套数组格式?基本上,我怎么能正确地取代???在提供的代码中?
答案 0 :(得分:2)
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
出于某种原因,我跑:
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字符串。
答案 1 :(得分:0)
您希望您的服务器在您的GET参数中收到类似的内容:
{c: {year: ["2015", "2016"]}}
因此,您从Angular应用程序发送的数据应该完全采用这种格式。因此,这应该有效:
$http({method: 'GET', url: '/clients.json', params: {c: {year: ['2015', '2016']}}.success(function(data){
//angular does something
});