如何使用(jQuery 样式)嵌套对象序列化 GET 参数
How to serialize GET params with (jQuery Style) Nested Objects
我需要通过 Angular 发送以下获取请求。根据这个请求,我有一个 rails 服务器接收参数和 returns 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] - 嵌套数组格式?基本上,我将如何正确更换 ???在提供的代码中?
您希望您的服务器在您的 GET 参数中接收类似这样的内容:
{c: {year: ["2015", "2016"]}}
因此,您从 Angular 应用发送的数据应该完全采用这种格式。因此,这应该有效:
$http({method: 'GET', url: '/clients.json', params: {c: {year: ['2015', '2016']}}.success(function(data){
//angular does something
});
var myUrl = '/clients.json'
var myParams = {c: {year: ["2015", "2016"]}};
$http({
url: myUrl,
method: 'GET',
params: myParams,
paramSerializer: '$httpParamSerializerJQLike'
});
$httpParamSerializerJQLike
服务是替代的 $http 参数序列化程序,它遵循 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 字符串。
我需要通过 Angular 发送以下获取请求。根据这个请求,我有一个 rails 服务器接收参数和 returns 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] - 嵌套数组格式?基本上,我将如何正确更换 ???在提供的代码中?
您希望您的服务器在您的 GET 参数中接收类似这样的内容:
{c: {year: ["2015", "2016"]}}
因此,您从 Angular 应用发送的数据应该完全采用这种格式。因此,这应该有效:
$http({method: 'GET', url: '/clients.json', params: {c: {year: ['2015', '2016']}}.success(function(data){
//angular does something
});
var myUrl = '/clients.json'
var myParams = {c: {year: ["2015", "2016"]}};
$http({
url: myUrl,
method: 'GET',
params: myParams,
paramSerializer: '$httpParamSerializerJQLike'
});
$httpParamSerializerJQLike
服务是替代的 $http 参数序列化程序,它遵循 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 字符串。