将发布数据从Ajax生成的输入字段(具有相同名称)发送到PHP

时间:2015-11-18 12:30:43

标签: php jquery ajax

我想将输入字段中的数据发布到PHP。我有一个jQuery脚本,它添加了新的输入字段(通过用户单击按钮)。所有输入字段都具有相同的名称input[]。当我提交表单时,我做var_dump($_POST),我得到的只是数组中只有一个项目(页面加载时的第一个输入)。有人知道从其他输入字段获取数据的方式,这是动态添加的吗?我需要使用JSON吗?

这是代码:

<body>
<div id="inp">
 <form action="asd.php" method="POST">
        <p><input type="text" name="input[]"></p>
</div>
<div id="adddiv">
    <input id="add" type="submit" value="+">
    <input id="ok" type="submit" value="ok">
 </form>
</div>
</body>
<script>
$(document).ready(function(){

$('#add').click(function(e){  //adds input fields
    e.preventDefault();
    $('#inp').append('<p><input type="text" name="input[]">&nbsp;<input id="del" type="submit" value="-"></p>');
});

$('#inp').on('click', '#del', function(e){  // removes input fields
    e.preventDefault();
    $(this).parent('p').remove();
});

});
</script>

现在是php文件:

<?php
var_dump($_POST);  // shows only 1 item in the array

if(!empty($_POST)){
  for($i=0;$i<sizeof($_POST);$i++){
    $data = $_POST['input'][$i];
    echo '<br>' . $data;
  }
}
?>

我找到了解决方法:

<div>
    <form action="process.php" method="POST">
        <div id="inp">
            <p><input type="text" name="input[]"></p>
        </div>
    <div id="adddiv">
        <input id="add" type="submit" value="+">
        <input id="ok" type="submit" value="ok">
    </div>
    </form>
</div>

1 个答案:

答案 0 :(得分:0)

您的HTML已损坏,您正在关闭&#34; #inp&#34;中间形式的div因此有效地关闭了表单,这就是为什么它只发布第一个输入 试试这个

<div id="inp">
    <form action="" method="POST">
        <p><input type="text" name="input[]"></p>
        <div id="adddiv">
            <input id="add" type="submit" value="+">
            <input id="ok" type="submit" value="ok">
        </div>
    </form>
</div>
</body>
<script>
    $(document).ready(function(){

        $('#add').click(function(e){  //adds input fields
            e.preventDefault();
            $('#adddiv').before('<p><input type="text" name="input[]">&nbsp;<input id="del" type="submit" value="-"></p>');
        });

        $('#inp').on('click', '#del', function(e){  // removes input fields
            e.preventDefault();
            $(this).parent('p').remove();
        });

    });
</script>