如何使用(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    
});

使用$httpParamSerializerJQLike:

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

DEMO on JSFiddle


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 字符串。