使用Rails友好的方式使用jquery序列化数组

时间:2015-08-03 21:12:12

标签: javascript jquery ruby-on-rails

我想使用jquery

将javascript数组发送到rails应用程序
$.ajax
  url: 'some url'
  data: {list: [{id: 4, name: 'John'}, {id: 5, name: 'Locke'}]}
  method: 'post'
  dataType: 'json'

此方法的问题在于序列化如下:

list [0] [id] = 4& list [0] [name] = John& ...等等

在Rails方面领先于

    {"list"=>
      {
        "0"=>{"id"=>"4", "name"=>"John"},
        "1"=>{"id"=>"5", "name"=>"Locke"}
      }
     }

虽然我想得到像

这样的东西
      {"list"=>
        [
          {"id"=>"4", "name"=>"John"},
          {"id"=>"5", "name"=>"Locke"}
        ]
       }

(注意内部列表而不是内部哈希)

有没有一种干净漂亮的方式以rails认可的方式发送数据?

(PS:该视图不是由rails生成的,它是一个phonegap移动应用程序)

这个问题jQuery posting JSON与我的问题没什么关系。

我的问题是以特定方式序列化,而问题是关于如何序列化。

1 个答案:

答案 0 :(得分:2)

我为您看到两个选项:

正如其他人所建议的那样,在您的AJAX调用中使用JSON.stringify() / JSON.generate()。是的,Rails会将您的数据作为单个字符串获取,但这没关系。收到数据后,请使用JSON.parse()将其重新设置为JSON。

两个,无论如何只是遍历它:

h = {"list"=>
      {
        "0"=>{"id"=>"4", "name"=>"John"},
        "1"=>{"id"=>"5", "name"=>"Locke"}
      }
     }

h['list'].each do |elem|
  value = elem[1]
end

# => {"id"=>"4", "name"=>"John"}
# => {"id"=>"5", "name"=>"Locke"}

每次迭代时,value将成为原始数组中的每个元素。