【问题标题】:mutidimensional array from javascript/jquery to ruby/sinatra从 javascript/jquery 到 ruby​​/sinatra 的多维数组
【发布时间】:2010-12-11 11:37:03
【问题描述】:

请问如何将二维数组从 javascript 传递给 ruby​​?我在客户端有这个:

function send_data() {
    var testdata = {
        "1": {
            "name": "client_1",
            "note": "bigboy"
        },
        "2": {
            "name": "client_2",
            "note": "smallboy"
        }
    }

    console.log(testdata);
    $.ajax({
      type: 'POST',
      url: 'test',
      dataType: 'json',
      data: testdata
    });
  }

这在服务器端:

post '/test' do p params end

但我做不到。我能在服务器端得到的最好的东西是

{"1"=>"[object Object]", "2"=>"[object Object]"}

我尝试在客户端添加 JSON.stringify 并在服务器端添加 JSON.parse,但第一个结果是

{"{\"1\":{\"name\":\"client_1\",\"note\":\"bigboy\"},\"2\":{\"name\":\"client_2\",\"note\":\"smallboy\"}}"=>nil}

虽然后者抛出了 TypeError - can't convert Hash into String.

谁能帮忙,或者发布一个简短的正确代码的sn-p,好吗?谢谢

【问题讨论】:

    标签: ruby ajax json multidimensional-array sinatra


    【解决方案1】:

    您可能希望在 javascript 端手动构建 JSON:

    [[{'object':'name1'},{'object':'name2'}],[...],[...]]
    

    这将构建一个包含对象的数组。

    它可能看起来像这样:

    testdata = [[{
            "1": {
                "name": "client_1",
                "note": "bigboy"
            }],
            [{"2": {
                "name": "client_2",
                "note": "smallboy"
            }]
        }]
    

    我可能有一些东西在这里,但这应该接近它的样子。

    【讨论】:

      【解决方案2】:

      我不确定这是否会有所帮助,但我有两个想法:序列化字段和/或迭代数组。

      通过设置序列化必须存储子数组的字段,我设法将 json 数组放入 activerecord 对象中:

      class MyModel < ActiveRecord::Base
        serialize :tags
      end
      

      并使用迭代器处理 json 数组:

      f = File.read("myarrayof.json")
      jarray = JSON.load(f)
      jarray.each { |j| MyModel.create.from_json(j.to_json).save }
      

      来回转换似乎有点麻烦,但我发现它是处理数组的最明显方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-14
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多