将多维数组从js发送到sinatra

时间:2015-08-19 23:01:04

标签: jquery multidimensional-array sinatra

目前我正在尝试找到一种方法,通过ajax将多维数组从jQuery发送到服务器。这是我的代码:

$.ajax({
    type: "POST",
    url: "/save",
    data: ["string", [["string1", "string2"], ["string 3", "string 4"]]],
    // it is arbitrary how many of the ["string", "string"] type arrays
    // there could be in the second element of the containing array.
    callback: save, // Don't worry about this function, it currently doesn't get called.
    dataType: "text"
});

现在发生的事情是,当服务器收到它并puts params.inspect时,它会输出{undefined=>""}。我认为解决方案可能在于将数组转换为jQuery中的字符串并在服务器接收后将其转换回来,但我不知道。

P.S。对于那些可以在vanilla js而不是jQuery中执行此操作的人,我尝试做的就是向/save发送ajax post请求,其中包含1个参数:["string", [["string1", "string2"], ["string 3", "string 4"]]]

更新

我使用谷歌chromes检查元素菜单来查看发送到服务器的请求。服务器按预期响应,当我查看发送的表单数据时,我看到了这一点(发送{" 1":["匹配",[[" a&#34] ;," a"],[" s"," s"]]]}):

1[]:match
1[1][0][]:a
1[1][0][]:a
1[1][1][]:s
1[1][1][]:s

这是否表示表单已正确发送?

1 个答案:

答案 0 :(得分:0)

您没有发送键/值对...只是恰好是数组的值。

尝试发送为:

var myArray =  ["string", [["string1", "string2"], ["string 3", "string 4"]]];

$.ajax({
    type: "POST",
    url: "/save",
    data: { postKeyName : myArray},    
    callback: save, 
    dataType: "text"
});

jQuery将负责在内部结束数组的形式,你只需要在你命名的post param中接收数组,而不是postKeyName