如果input元素是一个数组,如何使用JQuery发送序列化表单数据

14 php jquery

我的PHP代码中有这段代码:

while ($row = mysqli_fetch_assoc($result))
{
    extract($row);
    echo "<tr>";
    echo "<td bgcolor='#FFFFFF'><input id='bookArray[]' name='bookArray[]' type='checkbox' value='$book_id' />$book_id</td>";
    echo "<td bgcolor='#FFFFFF'>$threat_name</td>";
    echo "</tr>";
}
Run Code Online (Sandbox Code Playgroud)

在HTML页面中,我想使用jQuery serialize()方法在bookArray []中发送所选书籍的数组.在我的JavaScript中,

var selectedbooks = $("book_form").serialize();
alert (selectedbooks); 
Run Code Online (Sandbox Code Playgroud)

在警告消息框中,我没有得到任何值(空字符串).

以前当我使用Prototype时,它工作得很好.

小智 22

简单: serialize().replace(/%5B%5D/g, '[]')

  • 好主意,除了它应该是serialize().replace(/%5B%5D/g,'[]'); (14认同)
  • (因为,如果它不是具有全局属性的正则表达式,则仅替换第一个匹配项.) (3认同)

Hai*_*ood 9

我想出了一种方法,当使用post发送数据时

另一方面,您可以使用访问元素 $_['post']['name']

如果它是一个数组(例如,多选),那么在您的服务器上,您可以再次以数组的形式访问它 $_POST['myselect'][0]...

代码: 用于序列化帖子的表单数据的函数

function serializePost(form) {
    var data = {};
    form = $(form).serializeArray();
    for (var i = form.length; i--;) {
        var name = form[i].name;
        var value = form[i].value;
        var index = name.indexOf('[]');
        if (index > -1) {
            name = name.substring(0, index);
            if (!(name in data)) {
                data[name] = [];
            }
            data[name].push(value);
        }
        else
            data[name] = value;
    }
    return data;
}
Run Code Online (Sandbox Code Playgroud)


tva*_*son 0

您可能需要按照@Tomalak的建议更改您的PHP,但您还需要更改您的javascript。要引用命名元素,请使用#name选择器:

var selectedbooks = $('form#book_form').serialize();;
Run Code Online (Sandbox Code Playgroud)