【问题标题】:Posting multi dimensional form via jquery to php通过 jquery 将多维表单发布到 php
【发布时间】:2017-06-28 01:27:21
【问题描述】:

我有一个表格。 前 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);
                    });

【问题讨论】:

  • $(form).serialize(); 并使用 ajax 发送此序列化表单
  • 显示使用serialize() 的代码。如果你正确使用它,它应该做你想做的事。由于它没有达到您的预期,因此您一定是用错了,但如果您不发布它,我们无法判断您做错了什么。
  • 你的js呢?
  • 抱歉现在上传。我尝试了不同的写作方式,我使用了 serializeArray() @Anant
  • 对不起,现在在那儿@barmar

标签: php jquery ajax forms multidimensional-array


【解决方案1】:

您不应该将x 放在另一个对象中。它已经是 data$.post 参数所需的格式。

var x = $('#new_invoice').serialize();
$.post("script/new_invoice_script.php", x, function(data) {
  console.log(data);
});

{ x }{ x: x } 的 ES6 简写。这会将序列化的输入字符串放入$_POST['x']

【讨论】:

    【解决方案2】:

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

    你需要使用 .serializeArray()

    【讨论】:

    • 查看 Dup 以获得答案
    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 2011-01-03
    • 2020-08-29
    • 1970-01-01
    • 2012-11-15
    • 2014-10-06
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多