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分治法与二分搜索算法实例分析

    Java分治法与二分搜索算法实例分析 – 完整攻略 分治法 分治法(Divide and Conquer)是一种算法设计思想,它将原问题分成若干个子问题,然后将子问题逐一分解、解决,最终将子问题的解合并得到原问题的解。 分治法一般包含三个步骤:分解原问题,解决子问题,合并子问题的解。具体实现时,一般采用递归结构。 下面是一个使用分治法的例子:在一个无序数组中…

    Java 2023年5月19日
    00
  • Spring Boot + Mybatis-Plus实现多数据源的方法

    下面我将为你详细讲解 Spring Boot + Mybatis-Plus 实现多数据源的方法的完整攻略。 1. 概述 在实际开发中,可能会遇到需要同时连接多个数据源的情况。比如,我们需要从数据库A中获取数据,然后存储到数据库B中。或者,我们需要从两个不同的数据库中获取数据,进行一些关联查询和操作。这时候,就需要用到多数据源的技术。 在 Spring Boo…

    Java 2023年5月20日
    00
  • 微信公众平台获取access_token的方法步骤

    下面是关于微信公众平台获取access_token的方法步骤以及示例说明的完整攻略。 什么是access_token? 在微信公众平台开发中,为了保证安全性,许多接口需要access_token,access_token是认证微信公众账号的全局唯一票据,用于调用微信公众平台开发接口。 获取access_token的方法步骤 准备请求参数 请求参数是指appi…

    Java 2023年5月23日
    00
  • java之Object类用法实例

    Java之Object类用法实例 在Java中,所有的类都是继承自Object类,因此Object类是Java中最基本的类之一。本文将详细讲解Object类的用法,包括几个重要的方法以及示例说明。 Java Object类的方法 toString() toString() 方法是Object类中最基本的方法之一,通常用于返回对象的字符串表示。默认情况下,to…

    Java 2023年5月26日
    00
  • java转换时区时间过程详解

    Java转换时区时间过程详解 什么是时区? 时区指的是地球上各个区域所采用的标准时间,以协调世界时(UTC)为基准,把24个时区划分出来。每个时区相差一个小时,总共是24小时。 Java中时间和时区的表示 在Java中,时间和时区的表示是通过java.time包中的Java 8 Date/Time API来实现的。该API是基于JSR-310的国际标准,提供…

    Java 2023年5月20日
    00
  • Maven使用方法详及方式详细介绍

    Maven 使用方法详及方式详细介绍 什么是 Maven Apache Maven 是一个软件项目管理和理解工具。Maven 可以帮助你自动化构建、测试和部署你的项目。Maven 还提供了许多用来管理项目的标准化范式和描述,使得开发人员可以更容易地协作。 简介 Maven 使用一个 Project Object Model (POM) 文件来描述项目的构建,…

    Java 2023年5月20日
    00
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    先介绍一下Java生成验证码的基本流程: 随机生成字符或数字。 使用随机字体样式和大小。 创建画布,设置画布大小、背景色和边框。 在画布上绘制字符和干扰线等图形。 输出验证码图片。 下面我们来看一个完整的Java随机生成验证码的代码示例: package com.example; import java.awt.Color; import java.awt.…

    Java 2023年6月15日
    00
  • Java中@DateTimeFormat和@JsonFormat注解介绍

    当在Java中处理时间或日期数据时,我们常需要使用特定的格式将其转换成字符串或反向解析。而在Spring框架中,我们可以使用@DateTimeFormat和@JsonFormat两个注解来精细地控制时间和日期的格式化。下面将详细介绍这两个注解的使用方法和示例。 @DateTimeFormat注解介绍 1. 作用 @DateTimeFormat注解可以用于解析…

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