使用FormData的键检索和追加输入元素的数组

时间:2017-06-20 19:24:47

标签: javascript jquery form-data

假设我有以下HTML输入元素:

<input type="text" name="textinput[300]">
<input type="text" name="textinput[450]">
<input type="text" name="textinput[248]">

我希望检索这些字段的值,将它们附加到FormData对象,以便通过Ajax将它们发送到服务器端。每个数组元素中的键是至关重要的,因为它表示与每个输入字段相关联的唯一ID。我将文本字段名称设置为具有唯一键的数组的原因是因为我按以下方式设置了服务器端代码:

<?php
if(isset($_POST['textinput'])){
    $IDs = array_keys($_POST['textinput']);

    foreach($IDs as $index => $ID){

        $field_value = $_POST["textinput"][$ID]);

        $query = "UPDATE `tablename` SET fieldname = $field_value WHERE `ID` = $ID";

        try{
            $stmt = $db->prepare($query);
            $result = $stmt->execute();
        }
        catch(PDOException $ex){
            die("UPDATE Failed ".$ex->getMessage());
        }

    }
}
?>

以下JS对我来说并不起作用,显然除此之外还有更多内容,只需检索输入字段,将其附加到Formdata对象并通过ajax将其发送到服务器端进行处理:

<script>
        var textinput = document.getElementsByName('textinput');

        var data = new FormData();

        data.append('textinput[]', textinput);

        $.ajax({
            type: "POST",                
            url: "ajax-processing.php",
            processData: false,
            contentType: false,
            cache: false,
            data: data,
            success: function(data) {
                alert("Success!!!");
            },
            error: function(xhr, textStatus, errorThrown) {
                alert('Failed to save data');
            }
        });
}
</script>

1 个答案:

答案 0 :(得分:0)

尝试更改

var textinput = document.getElementsByName('textinput');
var data = new FormData();
data.append('textinput[]', textinput);

var data = new FormData();
var textinputs = document.querySelectorAll('input[name*=textinp‌​ut]');
for( var i = 0; i < textinputs.length; i++ )
    data.append(textinputs[i].name, textinputs[i].value);