【问题标题】:Send multidimensional array from js to sinatra从js发送多维数组到sinatra
【发布时间】:2015-08-20 10:09:08
【问题描述】:

目前我正在尝试找到一种方法,通过 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中的字符串,并在服务器收到后将其转换回来,但我不知道。

附:对于那些可以在 vanilla js 但不能在 jQuery 中执行此操作的人,我要做的就是向 /save 发送一个带有 1 个参数的 ajax 发布请求:["string", [["string1", "string2"], ["string 3", "string 4"]]]

更新

我使用谷歌浏览器检查元素菜单来查看发送到服务器的请求。服务器按预期响应,当我查看发送的表单数据时,我看到了这个(发送时 {"1": ["match", [["a", "a"], ["s", "s" ]]]}):

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

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

【问题讨论】:

    标签: jquery multidimensional-array sinatra


    【解决方案1】:

    您发送的不是键/值对……只是一个恰好是数组的值。

    尝试发送为:

    var myArray =  ["string", [["string1", "string2"], ["string 3", "string 4"]]];
    
    $.ajax({
        type: "POST",
        url: "/save",
        data: { postKeyName : myArray},    
        callback: save, 
        dataType: "text"
    });
    

    jQuery 将在内部处理结束数组的形式,您只需在您命名的 post 参数中接收数组,以代替 postKeyName

    【讨论】:

    • 我很困惑...你能写一些 ruby​​/psudo-ruby 或解释如何在 ruby​​ 中检索数组吗?
    • 另外为什么我必须发送一个键/值对?为什么我不能只发送数组?
    • 因为默认表单帖子由键/值组成......您不能只使用表单编码发送值。考虑一个常规形式,每个控件都有namevalue。您可以在帖子正文中作为 json 发送,然后解析正文并解码 json,如果您要发送的只是数组
    • 让我试试你所拥有的,如果可行,我会接受你的回答。非常感谢您的及时回复!
    • 好的,我尝试data: {"1": myArray}myArray 作为我发布的数组,当我在ruby 中使用puts params.inspect 时,我得到了{}
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2023-04-06
    • 2018-09-29
    • 1970-01-01
    • 2019-04-05
    • 2018-01-05
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多