使用jquery Ajax实现上传附件功能

使用jQuery Ajax实现上传附件功能的完整攻略需要分为以下几个步骤:

  1. HTML文件中定义上传表单及相关元素
<form id="upload-form" enctype="multipart/form-data">
  <input type="file" name="file" id="file-input">
  <button type="submit" id="submit-btn">上传</button>
</form>
<div id="progress-bar"></div>

其中,使用enctype="multipart/form-data"指定表单使用多重编码来上传文件,type="file"input元素用来选择上传文件,progress-bar用来展示上传进度。

  1. 在JavaScript文件中编写上传代码
$('#upload-form').on('submit', function(e) {
  e.preventDefault();

  var form = $(this);

  $.ajax({
    url: '/api/upload',
    type: 'POST',
    data: new FormData(form[0]),
    contentType: false,
    processData: false,
    xhr: function() {
      var xhr = new XMLHttpRequest();
      xhr.upload.addEventListener('progress', function(e) {
        if (e.lengthComputable) {
          var percent = Math.round((e.loaded / e.total) * 100) + '%';
          $('#progress-bar').text(percent);
        }
      }, false);
      return xhr;
    },
    success: function(response) {
      console.log(response);
    },
    error: function(xhr, status, error) {
      console.error(error);
    }
  });
});

上述代码中,使用$('#upload-form').on('submit', ...)绑定表单提交事件,使用FormData封装表单数据,contentType: falseprocessData: false指定不对数据进行处理,xhr.upload.addEventListener('progress', ...)监听上传进度变化。

  1. 服务器端处理上传文件
    上传文件需要在服务器端进行处理和保存,这里以Node.js和Express为例子:
const express = require('express');
const app = express();
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/api/upload', upload.single('file'), (req, res) => {
  console.log(req.file);
  res.send('上传成功');
});

app.listen(3000, () => {
  console.log('服务器已启动');
});

上述代码中,使用Express框架接收POST请求,使用multer中间件来处理文件上传,其中upload.single('file')指定只处理单个文件上传,并通过console.log(req.file)打印上传文件的信息。

  1. 测试代码并查看效果
    在终端中启动服务器,打开HTML文件,选择文件并点击上传按钮,观察上传进度和返回结果,可以看到文件上传成功并打印出上传文件的信息。
$ node app.js
$ open index.html

至此,使用jQuery Ajax实现上传附件功能的完整攻略已经完成。

示例1:使用jQuery File Upload插件
在实际开发中,可以使用现成的文件上传插件来简化开发工作,例如使用jQuery File Upload插件,只需要在HTML文件中引入相关CSS和JS文件,并调用初始化函数即可。示例如下:

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jquery.fileupload/5.72.0/jquery.fileupload.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.fileupload/5.72.0/jquery.fileupload.min.js"></script>

<form id="upload-form" enctype="multipart/form-data">
   <input type="file" name="file" id="file-input">
</form>

<div id="progress-bar"></div>

<script>
$(function () {
    $('#file-input').fileupload({
        url: '/api/upload',
        dataType: 'json',
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            $('#progress-bar').text(progress + '%');
        },
        done: function (e, data) {
            console.log(data.result);
        }
    });
});
</script>

示例2:使用axios实现文件上传
除了使用jQuery Ajax之外,还可以使用其他Ajax库来实现文件上传,例如axios。示例如下:

<form>
  <input type="file" id="file-input">
  <button type="button" id="upload-btn">上传</button>
</form>

<div id="progress-bar"></div>

<script>
document.querySelector('#upload-btn').addEventListener('click', () => {
  const file = document.querySelector('#file-input').files[0];
  const formData = new FormData();
  formData.append('file', file);

  axios.post('/api/upload', formData, {
    onUploadProgress: function(e) {
      const progress = Math.round((e.loaded / e.total) * 100) + '%';
      document.querySelector('#progress-bar').textContent = progress;
    }
  }).then(response => {
    console.log(response.data);
  }).catch(error => {
    console.error(error);
  });
});
</script>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用jquery Ajax实现上传附件功能 - Python技术站

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

相关文章

  • jQWidgets jqxGrid绑定完成事件

    以下是关于“jQWidgets jqxGrid绑定完成事件”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 bindingcomplete 在数据绑定完成后触发。事件可用于在数据绑定完成后执行一些操作。 完整攻略 以下是 jqxGrid件 bindingcomplete 事件的完整攻略: 监听 bindingcomplete 事件 $(&quo…

    jquery 2023年5月10日
    00
  • jQuery 1.5最新版本的改进细节分析

    jQuery 1.5最新版本的改进细节分析 jQuery是一款流行的JavaScript库,用于快速开发交互性强的网络应用。jQuery 1.5是其最新版本,该版本在前几个版本的基础上新增了一些特性和功能,并且进行了性能优化和错误修复。 改进细节 链式操作 与以往版本不同,jQuery 1.5能够获取任何类型的jQuery对象,并将其链接到当前方法。具体而言…

    jquery 2023年5月27日
    00
  • JQuery操作单选按钮以及复选按钮示例

    下面我将为你详细讲解“JQuery操作单选按钮以及复选按钮示例”的完整攻略。 1. JQuery操作单选按钮 1.1. HTML结构 首先,我们先来看一下单选按钮的HTML结构: <label> <input type="radio" name="gender" value="male&qu…

    jquery 2023年5月28日
    00
  • jquery插件如何使用 jQuery操作Cookie插件使用介绍

    下面是关于jQuery操作Cookie插件的使用介绍。首先,我们需要知道什么是cookie。cookie是指网站为了辨别用户身份、记住用户上次访问时间等而存储在用户本地终端上的数据,通常是服务器发送给浏览器的一个小文本文件,浏览器会把这个文件保存并且在之后的每次请求中自动发送给服务器。 因为cookie在Web开发中使用非常广泛,所以有很多的jQuery插件…

    jquery 2023年5月19日
    00
  • JQuery获取对象的方式介绍

    当需要操作web页面中的元素时,需要先获取到该元素。jQuery提供了多种获取页面元素的方式,主要包括以下几种: 通过标签名获取元素 可以通过标签名获取整个页面中的某一类元素。比如: $(‘div’) // 获取所有的div元素 $(‘input’) // 获取所有的input元素 通过id获取元素 可以通过元素的id属性获取到该元素。比如: $(‘#myE…

    jquery 2023年5月27日
    00
  • jQuery中width()方法用法实例

    jQuery 中 width() 方法用法实例 一、什么是 width() 方法 width() 方法是 jQuery 中常用的用于获取元素宽度的方法。它可以获取一个元素的宽度,但是不包括边框和外边距。如果要获取包含边框和外边距的宽度,需要使用 outerWidth() 或 outerWidth(true) 方法。 二、width() 方法的语法和参数 wi…

    jquery 2023年5月28日
    00
  • JS组件系列之MVVM组件构建自己的Vue组件

    让我来详细讲解“JS组件系列之MVVM组件构建自己的Vue组件”的完整攻略。 MVVM组件的基础概念 首先,我们需要了解MVVM组件的基础概念。MVVM组件是一种基于Vue.js框架的组件化开发方式,它采用了“Model-View-ViewModel”的设计模式,将UI界面与数据逻辑分离。其中,Model表示数据模型,View表示UI界面,ViewModel…

    jquery 2023年5月27日
    00
  • jQWidgets jqxGrid columnreordered事件

    以下是关于“jQWidgets jqxGrid columnreordered事件”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 columnreordered 事件在列重新排序时发。 完整攻 以下是 jqxGrid 控件 columnreordered 事件的完整攻略: 监听 `columnreordered 事件 $("#jqx…

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