【问题标题】:Retrieve and append array of input elements with keys to FormData使用 FormData 的键检索和附加输入元素数组
【发布时间】:2017-11-23 11:50:33
【问题描述】:

假设我有以下 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>

【问题讨论】:

  • 如果将textinput 变量设为真正的数组会怎样? E.G [].slice.call(document.querySelectorAll('input[name*=textinput]')); 在附加到 'FormData()' 之前?
  • sql注入攻击! &lt;input type="text" name="textinput['' or 1=1]"&gt;

标签: javascript jquery form-data


【解决方案1】:

尝试改变

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);

【讨论】:

  • 简单优雅的解决方案。工作就像一个魅力,谢谢!
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2011-06-27
  • 2018-09-28
  • 2015-10-23
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多