$ .each无法将数据附加到formData(),尽管填充了键值

时间:2017-07-30 10:12:29

标签: javascript jquery ajax

我有以下HTML表单:

<form action="mail/filesend.php" method="POST" accept-charset="utf-8" enctype="multipart/form-data" validate>
    <div class="input-wrpr">
        <input type="file" name="files">
    </div>
    <button type="submit">
        Send File
    </button>       
</form>

我在文件输入中附加了以下更改事件:

let files = null; // Global variable

$('input[type="file"]').on('change' , (e) => {
    files = e.target.files;
});

我的提交处理程序中包含以下代码:

$('form').submit(function(e) {
    e.stopPropagation();
    e.preventDefault();

    let data = new FormData();

    console.log(data);
    $.each(files, function(key, value) {
        data.append(key, value);
    });
    console.log(data);

});

注意我console.log循环之前和之后的$.each数据,我遇到的问题是$.each循环之前和之后没有数据附加到{ {1}}变量。为什么会这样?

如果我data键,则值为console.log作为键,并且对象看起来像下面的值:

0

为什么File {name: "IMO.pdf", lastModified: 1501150320000, lastModifiedDate: Thu Jul 27 2017 15:42:00 GMT+0530 (India Standard Time), webkitRelativePath: "", size: 5941320, …} 循环无法将数据附加到我的$.each变量?

4 个答案:

答案 0 :(得分:2)

我不知道为什么你的代码失败了,但是0,1,2 ...可能不是好的参数。可以这样做:

$.each(files, function(key, value){
        data.append("files[]",value,value.name);
});

答案 1 :(得分:1)

使用console.log(data.getAll('0'))检查文件的data对象。

仅使用console.log(data)是不够的。

答案 2 :(得分:1)

首先,如果您的输入接受多个文件,则需要将[]添加到您的姓名attr

<input type="file" name="files[]" id="my-inptu">

second 我们会将files变量添加到您的提交处理程序中:

$('form').submit(function(e) {
    e.stopPropagation();
    e.preventDefault();

    let files = $("#my-input")[0].files;
    let data = new FormData();

    console.log(data);
    $.each(files, function(key, value) {
        data.append(files[key].name, value);
    });

    console.log(data);
});

答案 3 :(得分:1)

这对你有用吗?

$.each(files, function(key, value){
        data.append("files[]",value);
});
相关问题