【问题标题】:How can I send an array of javascript object to a php script via $.post?如何通过 $.post 将 javascript 对象数组发送到 php 脚本?
【发布时间】:2010-12-02 17:13:27
【问题描述】:

我的页面上有一个数据表。列是“开始”、“结束”、“评论”和“选项”。选项列中有一个用于删除行的按钮,以及一个使表格的行可编辑的按钮。这允许更改“start”、“end”和“comment”的值。再次单击它完成编辑过程。最后,还有一种方法可以向表中添加另一行。所有这些都按预期工作。

我想在底部添加一个按钮,该按钮从表中的数据创建一个数组,看起来像这样(表示为 JSON 纯粹是为了便于向 SO 显示:不需要):

[
    {
        "start"     :"2009/08/01",
        "end"       :"2009/08/08",
        "comment"   :"an example date.",
    },
    {
        "start"     :"2009/07/01",
        "end"       :"2009/07/08",
        "comment"   :"another example date, a month earlier.",
    },
    {
        "start"     :"2000/07/01",
        "end"       :"2000/07/08",
        "comment"   :"another example date, a year earlier. You get the idea.",
    }
]

我不应该在构建数组时遇到太多麻烦,但是一旦有了,我如何将它发布到后端 php 脚本(然后使用put_csv() 将数据写入文件)?理想情况下,它将以数组格式在服务器端可用,以允许验证。

如果需要的话,我很乐意使用 jquery。

【问题讨论】:

    标签: php jquery json object .post


    【解决方案1】:

    如何将其结束到服务器取决于您要归档什么。如果要加载将处理数据的新页面,可以使用带有隐藏输入的常用表单。或者,如果您想通过 AJAX 在后台处理,请使用jQuery.ajax,正如 CRasco 所说。无论使用哪种方式,都需要将结构化数组转换为简单的键/值列表。

    一种选择是生成一个 JSON 文档(我认为 jQuery 没有为此提供功能,但您可以轻松找到一些东西)并将单个字段与序列化文档一起使用。然后在服务器端,您将使用json_decode 来取回阵列。如果您使用的是 AJAX 方法,jQuery.ajax 调用中的数据选项将包含:

    {
        'data': '[{"start":"2009/08/01","end":"2009/08/08","comment":"an example date."},...'
    }
    

    更好的方法是将其序列化为 PHP 本身可以理解的格式的字段列表。这意味着您不必做任何特别的事情,$_POST['data'] 将包含该数组。例如:

    {
        'data[0][start]': '2009/08/01',
        'data[0][end]': '2009/08/08',
        'data[0][comment]': 'an example date.',
        'data[1][start]': '2009/07/01',
        'data[1][end]': '2009/07/08',
        'data[1][comment]': 'another example date, a month earlier.',
        ... 
    }
    

    如果您使用的是表单方法,则需要生成输入字段,例如:

    <input type="hidden" name="data[0][start]" value="2009/08/01" />
    

    【讨论】:

    • 我不知道 php 可以传递关联(或多维)数组。我怎么能在 javascript 中构建所述数组?
    【解决方案2】:

    我肯定会使用 jQuery。这是 $.post() 函数的页面。

    http://docs.jquery.com/Ajax/jQuery.post

    一个警告是 $.post() 是 $.ajax() 函数的包装器,它被简化并消除了您为成功发布以外的任何内容设置回调的能力。对于通过 AJAX 进行的重要交易,我会使用这个:

    http://docs.jquery.com/Ajax/jQuery.ajax

    一个例子是:

    $.ajax({
          url: "script.php",
          global: false,
          type: "POST",
          data: ({id : this.getAttribute('id')}),
          dataType: "html",
          success: function(msg){
             alert(msg);
          }
       });
    

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      相关资源
      最近更新 更多