jquery - 如何使用(jQuery 风格)嵌套对象序列化 GET 参数

标签 jquery ruby-on-rails angularjs angular-http

我需要通过 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

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

关于jquery - 如何使用(jQuery 风格)嵌套对象序列化 GET 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595144/

相关文章:

javascript - playframework 从 View javascript 调用模型方法

ruby-on-rails - 如何使用 rake db :seed? 将种子数据添加到测试数据库

javascript - 显示 API 返回的 PDF 文档

javascript - Angular 错误: Uncaught Error: [$injector:modulerr] Failed to instantiate module

javascript - 从外部网站获取内容?

jquery - Rails 3 为移动用户处理 Javascript

javascript - 如何根据条件替换多个div中的文本?

ruby-on-rails - Ruby On Rails 是否像 Java 一样对内存有任何限制

ruby-on-rails - 为 Rails 编写元刷新方法

angularjs - 当 ngModel 的 $render 在 AngularJS 中被调用时?