使用sinatra将数组从javascript传递给ruby

时间:2015-04-20 04:34:24

标签: javascript ruby arrays sinatra

我想要实现的是将一个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吗?

2 个答案:

答案 0 :(得分:2)

是。使用js:

将数组转换为json(字符串)
var data = JSON.stringify(yourArray);

将字符串发送到ruby脚本。然后将字符串解析为带有ruby的数组:

require 'json'

arr = JSON.parse(the_string)

答案 1 :(得分:1)

在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