jquery中的ajax异步上传

下面是关于jQuery中的Ajax异步上传的完整攻略:

什么是Ajax异步上传

在之前不使用Ajax时,文件上传只能通过表单提交的方式,整个页面都要刷新。而现在采用Ajax提交方式,在页面不重载的情况下,上传文件并得到服务器端的响应。

异步上传的详细实现步骤:

  1. 设置一个表单,包含一个文件上传控件
<form action="your-url" id="uploadForm" enctype="multipart/form-data">
    <label for="file">选择文件: </label><input type "file" name="file" id="file">
    <input type="submit" value="上传" />
</form>
  1. 处理Ajax异步上传
$(document).ready(function(){
    $('#uploadForm').submit(function(e){
        e.preventDefault();
        var formData = new FormData($(this)[0]);
        $.ajax({
            url: "your-url",
            type: "POST",
            data: formData,
            dataType: 'json',
            contentType: false,
            processData: false,
            success: function(data){
                alert(data);
            },
            error: function(){
                alert("上传出错");
            }
        });
        return false;
    });
});

上文代码中
- e.preventDefault() 阻止表单默认提交
- new FormData($(this)[0]) 创建FormData对象
- url 上传地址
- data 需要提交的数据(表单内容)
- dataType 数据类型(json)
- contentType 默认值为 application/x-www-form-urlencoded;charset=UTF-8,即以表单方式提交数据;false代表禁止设置请求头信息
- processData 默认值为 true,即对于data选项中设置的数据,jQuery默认会序列化为表单类型(default: "application/x-www-form-urlencoded"),所以必须禁用该选项,避免对formdata处理后的数据进行序列化,否则表单无法正常提交

示例一: 文件上传进度条

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传带进度条</title>
</head>
<body>
    <form enctype="multipart/form-data" id="upload" method="post">
        <input type="file" id="file" name="file" />
        <input type="submit" value="上传" />
    </form>
    <div id="progress" style="width: 400px; height: 20px; background: #ccc;"></div>
    <div id="percentage" style="width: 400px; height: 20px; background: #f00;"></div>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
    $(function(){
        //文件上传进度条
        $('#upload').submit(function(e){
            e.preventDefault();
            $.ajax({
                url: 'your-upload-url',   //请求路径
                type: 'post',   //提交方式
                data: new FormData(this),    //表单数据(form表单对象)
                processData: false,
                contentType: false,
                xhr: function(){
                    let xhr = $.ajaxSettings.xhr();
                    if(xhr.upload){
                        xhr.upload.addEventListener('progress', function(e){
                            //已上传的大小,单位BYTE
                            let loaded = e.loaded;
                            //文件总大小,单位BYTE
                            let total = e.total;
                            //已经上传的百分比
                            let percent = Math.floor(100*loaded/total);
                            //更新进度条
                            $('#progress').attr('style', 'width:'+percent+'%; height:20px; background:#ccc;');
                            $('#percentage').text(percent+'%');
                        });
                        return xhr;
                    }
                },
                success: function(result){
                    console.log(result);
                },
                error: function(){
                    console.warn('文件上传出错!');
                }
            });
        });
    });
</script>
</html>

示例二: 图片上传预览

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>预览图片</title>
</head>
<body>
    <form enctype="multipart/form-data" method="post">
        <input type="file" id="pictureFile" name="pictureFile">
        <input type="button" value="上传" id="upload">
    </form>
    <img src="" id="picturePreview">
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
    $(function(){
        $('#pictureFile').change(function(){
            let _this = $(this);
            //获取选定文件
            let files = this.files[0];
            //创建读取文件对象
            let reader = new FileReader();
            //创建文件读取对象
            reader.onload = function(){
                $('#picturePreview').attr('src', window.URL.createObjectURL(files));    //图片预览
                $('#upload').click(function(){
                    let formData = new FormData();
                    formData.append('pictureFile', $('#pictureFile')[0].files[0]);
                    $.ajax({
                        url: 'your-upload-url',
                        contentType:false,
                        processData:false,
                        type: 'post',
                        data: formData,
                        success: function(result){
                            console.log(result);
                        },
                        error: function(){
                            console.warn('图片上传出错!');
                        }
                    });
                });
            }
            //调用reader的readAsDataURL方法,readsAsDataURL方法用于读取文件内容
            reader.readAsDataURL(files);
        });
    });
</script>
</html>

这样,我们就学习了Ajax异步上传的完整攻略,包含如何设置表单,处理Ajax异步上传,如何设置文件上传进度条等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery中的ajax异步上传 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java日常练习题,每天进步一点点(53)

    Java日常练习题,每天进步一点点(53) 这是一组Java练习题,旨在帮助Java初学者提高编程能力。在本文中,我们将详细讲解Java日常练习题,并提供两个示例来说明如何解决这些问题。 练习题 编写一个Java程序,计算1到100之间所有偶数的和。 编写一个Java程序,将一个字符串中的所有空格去掉。 编写一个Java程序,判断一个字符串是否为回文字符串。…

    Java 2023年5月18日
    00
  • jmeter添加自定义扩展函数之图片base64编码示例详解

    我们来详细讲解一下“jmeter添加自定义扩展函数之图片base64编码示例详解”的攻略。 准备工作 在开始之前,需要先进行一些准备工作: 确认已经安装好了jmeter。如果尚未安装,则需要先安装jmeter。 下载并安装JMeterPlugins-Extras插件包。可以从JMeterPlugins官网下载并安装该插件包。 步骤一:创建自定义函数 在jme…

    Java 2023年5月20日
    00
  • Java SpringMVC实现国际化整合案例分析(i18n)

    Java SpringMVC实现国际化整合案例分析(i18n) 国际化(Internationalization)是指将应用程序设计成可以适应不同的语言和文化环境。在Java SpringMVC中,我们可以使用国际化(i18n)来实现多语言支持。本文将详细讲解Java SpringMVC实现国际化整合的案例分析,并提供两个示例说明。 国际化的实现原理 在Ja…

    Java 2023年5月17日
    00
  • Spring Boot项目使用Flyway的详细教程

    当我们开发Spring Boot项目时,我们通常需要在数据库中创建各种数据表、视图等数据结构。随着项目的迭代,这些数据结构往往需要不断地进行更新、迁移、升级等操作。为了方便地管理这些数据库变更,我们可以使用Flyway工具来进行数据库迁移管理。下面是一份详细的Spring Boot项目使用Flyway的教程。 安装和配置Flyway 在Spring Boot…

    Java 2023年5月26日
    00
  • java中编码问题的处理方案

    Java中编码问题的处理方案 在Java开发过程中,我们经常会遇到编码问题,这是由于不同的操作系统、编码方式之间的差异导致的。为了避免出现编码问题,我们需要在开发中采取一些处理方案。 1. 统一编码格式 为了保证代码的可移植性,我们应该统一采用UTF-8编码格式,这样就可以避免不同编码格式之间的互相转换和兼容性问题。 在Java中,我们可以通过设置Java虚…

    Java 2023年5月20日
    00
  • java的Builder原理和实现详解

    Java的Builder模式原理和实现详解 什么是Builder模式? Builder模式是Java中的一种设计模式,它允许您创建复杂对象而无需了解其内部细节。此模式外部提供一种访问内部对象的流畅界面。 为什么需要Builder模式? 在Java中,创建具有多个属性的对象是一项常见的任务。然而,当您的对象有大量的属性时,创建对象的代码变得非常冗长和难以维护。…

    Java 2023年5月19日
    00
  • SpringMVC+Shiro的基本使用及功能介绍

    SpringMVC+Shiro的基本使用及功能介绍 什么是Shiro Shiro是一个强大且易于使用的Java安全框架,它提供了身份验证、授权、加密、会话管理等功能,可以帮助我们快速构建安全的Web应用程序。 SpringMVC集成Shiro SpringMVC集成Shiro可以帮助我们快速构建安全的Web应用程序。以下是SpringMVC集成Shiro的基…

    Java 2023年5月17日
    00
  • Java基数排序radix sort原理及用法解析

    Java基数排序(radix sort)原理及用法解析 简介 基数排序(radix sort)是一种线性时间非比较排序算法。该算法按照元素的每个位数进行排序。 对于待排序的整数集合,基数排序将集合中的元素按照它们的个位、十位、百位……的大小排序(可以理解为在固定位数的情况下逐个进行桶排序)。 基数排序的时间复杂度为 $O(d \cdot (n+k))$,其中…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部