加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FormData以及原生Ajax上传图片

发布时间:2020-12-16 03:10:28 所属栏目:百科 来源:网络整理
导读:Ajax对于表单提交来说,是一个很好的工具,他提供了异步提交的效果,这使得用户提交表单时不需要刷新页面就可获知提交成功与否,但一直以来,网上的示例大都是JQuery上传的教程,原生Ajax似乎并不受大家热爱,更别提原生Ajax上传图片的教程了,本篇将为你讲

Ajax对于表单提交来说,是一个很好的工具,他提供了异步提交的效果,这使得用户提交表单时不需要刷新页面就可获知提交成功与否,但一直以来,网上的示例大都是JQuery上传的教程,原生Ajax似乎并不受大家热爱,更别提原生Ajax上传图片的教程了,本篇将为你讲述JavaScript中使用FormData上传文件的教程

FormData

FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。比起早先的Ajax,发送FormData的Ajax不仅可以发送图片,更好的一点是我们无需设置RequestHeader,也无需担心自己粗心写错xhr.send()中的参数。

用法

我们可以使用表单来构造一个FormData对象,也可以创建一个空的FormData对象,之后手动添加一些数据进去。

使用表单构造FormData对象。

做法很简单,使用getElementById()querySelector()这类选择器获取表单对象,将其传入FormData的构造方法,如下:

<form id="formA" method="POST" action="/upload" enctype="multipart/form-data">
    <input type="text" name="username" id="username">
    <input type="file" name="pic" id="pic" multiple="multiple">
    <input type="button" value="FormData提交一个Form" onclick="sub1()">
</form>
function sub1() {
        let form = document.getElementById('formA');
        let data = new FormData(form);
        let xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4 && xhr.status==200){
                alert(xhr.responseText);
            }
        };
        xhr.open('POST','/upload');
        xhr.send(data)
    }

空的FormData对象&添加数据

这个也很简单,添加数据方法的第一个参数是数据的名字,第二个参数是数据的值。如下:

<form id="formA" method="POST" action="/upload" enctype="multipart/form-data">
    <input type="text" name="username" id="username">
    <input type="file" name="pic" id="pic" multiple="multiple">
    <input type="button" value="FormData添加数据后提交" onclick="sub2()">
</form>
function sub2() {
    let username = document.getElementById('username');
    let pics = document.getElementById('pic');
    let data = new FormData();
    data.append('username',username.value);
    for(let pic of pics.files){
        data.append('pic',pic);
    }
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status==200){
            alert(xhr.responseText);
        }
    };
    xhr.open('POST','/upload');
    xhr.send(data)
}

如果一个文件上传框可以上传多个文件,那么得将这些文件分别添加进FormData,注意他们的名字是一样的。

结果是一样的:

源代码

后台是用python flask写的
代码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读