如何通过$ .post将一个javascript对象数组发送到php脚本?

时间:2009-09-30 16:08:20

标签: php jquery json object .post

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

我想在底部添加一个按钮,用于创建表中数据的数组,看起来像这样(表示为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。

2 个答案:

答案 0 :(得分: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" />

答案 1 :(得分:0)

我肯定会使用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);
      }
   });