我需要通过 Angular 发送以下 get 请求。根据此请求,我有一个 Rails 服务器,它接收参数并返回 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] - 嵌套数组格式?基本上,我如何正确替换 ???在提供的代码中?
最佳答案
使用$httpParamSerializerJQLike :
var myUrl = '/clients.json'
var myParams = {c: {year: ["2015", "2016"]}};
$http({
url: myUrl,
method: 'GET',
params: myParams,
paramSerializer: '$httpParamSerializerJQLike'
});
$httpParamSerializerJQLike
服务是替代的 $http params 序列化程序,它遵循 jQuery 的 param()
方法逻辑。
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
For some reason when I run:
var myParams = {c: {year: ["","2015","2016"]}}; var myParamsString = JSON.stringify(myParams); var myParamsSerial = $httpParamSerializerJQLike(myParamsSerial);
the
myParamsSerial
comes back as blank. Any ideas?
不要对对象进行字符串化:
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 字符串。
关于jquery - 如何使用(jQuery 风格)嵌套对象序列化 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595144/