【问题标题】:Passing an array from javascript to ruby with sinatra使用 sinatra 将数组从 javascript 传递给 ruby
【发布时间】:2025-12-24 02:10:12
【问题描述】:

我想要完成的是将 2D 数组从 javascript 传递给 ruby​​ 可以识别的东西。所有对象都是字符串

我一直在使用 gon-sinatra,但它并不能完全满足我的需求。 我可以将要传递的字符串存储为 gon.text 做

@temp = gon.text
array.push(@temp)

这不起作用,因为当我希望它作为字符串时,它会将 gon.text 显示为 nil 对象类型。 gon.text.to_s 返回一个空字符串,所以当我尝试显示它时,什么也没有发生。 alert("<%= @temp %>") // displays an empty string

我在这里有点茫然,不知道解决这个问题的最佳方法。将数组存储为json,然后使用ruby读取json会更好吗?

【问题讨论】:

    标签: javascript ruby arrays sinatra


    【解决方案1】:

    是的。使用 js 将数组转换为 json(字符串):

    var data = JSON.stringify(yourArray);
    

    将字符串发送到您的 ruby​​ 脚本。然后用 ruby​​ 将字符串解析成 Array:

    require 'json'
    
    arr = JSON.parse(the_string)
    

    【讨论】:

      【解决方案2】:

      在 Javascript 中,您可以执行以下操作:

      var myArray = [ ['str1','str2'], ['str3','str4'] ];
      $.get('/endpoint', { myArray: myArray })
      

      您使用 sinatra 的端点是:

      get 'endpoint' do
          myArrayStr = params[:myArray]
          error!('invalid array') unless myArrayStr
          @myArray = JSON.parse(myArrayStr)
          gon.rabl 'goners/yourFile.rabl', :instance => self
      end
      

      在您的 gon 文件中,您可以参考:

      alert(gon.myArray[0][0]); // str1
      

      【讨论】: