AJAX - 如何从输入文件中获取数据以附加表单数据?

Posted

技术标签:

【中文标题】AJAX - 如何从输入文件中获取数据以附加表单数据?【英文标题】:AJAX - How to get data from input file to append formdata? 【发布时间】:2017-05-13 19:06:22 【问题描述】:

您好,我想使用纯 javascript ajax(没有 jquery)来附加表单数据,但我不知道如何从输入文件类型中获取数据

function handleForm(e) 

    e.preventDefault();
    var username = document.getElementById('username').value;
    var email = document.getElementById('email').value;

    var data = new FormData();

    data.append('username', username); 
    data.append('email', email);
    data.append('file', ?????);  ////// How to get data from input file


    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'test2.php', true);

    xhr.onload = function(e) 
        if(this.status == 200) 
            console.log(e.currentTarget.responseText);  
            alert(e.currentTarget.responseText + ' items uploaded.');

        
    

    xhr.send(data);

...

    Username: <input type="text" name="username" id="username"><br/>
    Email: <input type="text" name="email" id="email"><br/>
    Image: <input type="file" name="file" id="myimg"><br/>

    <input type="submit">
</form>

【问题讨论】:

file....的选择器查询在哪里 对不起,我的文件选择器是#myimg 那么像 usernameemail 那样对 myimg 进行选择器查询不是一个好主意吗? 【参考方案1】:

&lt;input type="file" /&gt; html 元素有一个files 属性(FileList 类型)。 如果选择了文件,请检查长度,如果是,则将文件添加到 FormData 对象

var fileInput = document.getElementById("myimg");
if (fileInput.files.length > 0) 
    data.append("file", fileInput.files[0]);

有关如何使用FormData 对象的更多示例,请查看此链接: https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

【讨论】:

【参考方案2】:
document.getElementById("file_input_id").files[0]

试试

【讨论】:

解释为什么 OP 应该使用它并解释为什么它有 .file[0] 不是一个好主意如果你想发布答案/解决方案,我强烈建议像某些人一样给出详细的答案希望从给出的答案/解决方案中学习,而不仅仅是复制/粘贴它们。【参考方案3】:
<input type="file" id="fileinput" />

获取文件..你可以使用

var myFile = $('#fileinput').prop('files')[0];

【讨论】:

嗯,这对我来说就像 jQuery... "pure javascript ajax (no jquery)"

以上是关于AJAX - 如何从输入文件中获取数据以附加表单数据?的主要内容,如果未能解决你的问题,请参考以下文章

RoR:发送附加数据以使用 Jquery AJAX 提交

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

如何在自动生成的for循环中从html表单中获取唯一值

如何通过ajax从表单发送POST数据数组?

仅当从下拉列表中选择选项时才附加到 iframe src

从输入表单中获取 Base64 编码文件数据