通过jquery发布多维表单到php

时间:2017-02-09 21:04:11

标签: php jquery ajax forms multidimensional-array

我有一张表格。 前2个输入只是客户ID和地址ID。 其余的是多维形式,因为用户可以动态添加更多项目。

<div class='invoice_object'>
    <input      name='item[1][quantity]'    type='text'  value=''/>
    <textarea   name='item[1][description]'     ></textarea>
    <input      name='item[1][unit_price]'  type='text'  value=''/>
    <input      name='item[1][amount]'      type='text'  value=''/>
</div>

可以使用jquery添加另一个发票对象,它就像这样:

    <div class='invoice_object'>
    <input      name='item[2][quantity]'    type='text'  value=''/>
    <textarea   name='item[2][description]'     ></textarea>
    <input      name='item[2][unit_price]'  type='text'  value=''/>
    <input      name='item[2][amount]'      type='text'  value=''/>
</div>

如果我使用提交按钮正常发布,那么$ _POST变量将包含:

$_POST['customer']
$_POST['address']
$_POST['item'] {
                ['1'] {
                       ['quantity']
                       ['description']
                       ['unit_price']
                       ['amount']
                       }
                ['2'] {
                       ['quantity']
                       ['description']
                       ['unit_price']
                       ['amount']
                       }
                }

我已经搜索了几个小时并尝试了各种版本或序列化和serializeArray.JSON解码等 看来你只能从jquery发送一个字符串到php。使用JSON可以将其发送到php文件,但是$ _POST总是只有1个值并且是一个包含所有数据的字符串。

我认为必须有一种方法可以做到这一点......而不是手动制作一个根据方括号的位置剖析字符串的函数。

我可以提供一些建议。 感谢名单。 但没有全面解剖

jquery的

    var x = $('#new_invoice').serialize();

    $.post("script/new_invoice_script.php", {
                    x                       
                    }, function(data) {     
                    console.log (data);
                    });

2 个答案:

答案 0 :(得分:3)

你不应该将x放在另一个对象中。它已经采用data的{​​{1}}参数所需的格式。

$.post

当您撰写var x = $('#new_invoice').serialize(); $.post("script/new_invoice_script.php", x, function(data) { console.log(data); }); 时,它是{ x }的ES6简写。这会将序列化的输入字符串放入{ x: x }

答案 1 :(得分:0)

.serialize()方法以标准URL编码表示法创建文本字符串。它可以作用于选择了单独表单控件的jQuery对象,例如,,和:$(“input,textarea,select”)。。serialize();

您需要使用.serializeArray()