原生JS和jQuery版实现文件上传功能

实现文件上传功能是网站开发中常见的需求之一。下面是原生JS和jQuery版实现文件上传功能的完整攻略。

原生JS版实现文件上传功能

原生JS版实现文件上传功能需要借助HTML5的FormData对象进行文件数据的封装和提交。

HTML代码

首先,在HTML代码中添加一个表单,表单内包含一个input[type=file]用于选择文件,以及一个按钮用于提交表单。

<form id="uploadForm" enctype="multipart/form-data">
  <input type="file" name="file" multiple>
  <button type="button" id="uploadBtn">上传文件</button>
</form>

JS代码

其次,在JS代码中获取表单元素和按钮元素,对按钮添加点击事件监听器,在点击事件的响应函数中获取文件数据,使用FormData对象构造表单数据并提交表单。

var uploadForm = document.getElementById('uploadForm');
var uploadBtn = document.getElementById('uploadBtn');
uploadBtn.addEventListener('click', function() {
  var fileInput = document.querySelector('input[type=file]');
  var files = fileInput.files;
  var formData = new FormData(uploadForm);
  for (var i = 0; i < files.length; i++) {
    formData.append('file', files[i]);
  }
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        console.log(xhr.responseText);
      } else {
        console.error(xhr.statusText);
      }
    }
  };
  xhr.open('POST', '/upload');
  xhr.send(formData);
});

在以上代码中,需要注意以下几点:

  1. 使用FormData对象构造表单数据时,需要传入表单元素uploadForm作为构造函数的参数。
  2. 遍历files对象将每个文件都添加到FormData对象中,这样在后台处理时才能正确获取每个文件的数据。
  3. XMLHttpRequest对象用于与后台进行数据交互,需要使用open()方法打开连接通道,并设置请求方法和请求地址,使用send()方法发送数据。
  4. 在readyState值为4时代表数据交互完成,status值为200时代表请求成功,text属性包含后台返回的数据。

示例说明

下面展示一个完整的原生JS版文件上传功能的示例,可与上述代码对照着看。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>原生JS版文件上传</title>
</head>
<body>
  <form id="uploadForm" enctype="multipart/form-data">
    <input type="file" name="file" multiple>
    <button type="button" id="uploadBtn">上传文件</button>
  </form>
  <script>
    var uploadForm = document.getElementById('uploadForm');
    var uploadBtn = document.getElementById('uploadBtn');
    uploadBtn.addEventListener('click', function() {
      var fileInput = document.querySelector('input[type=file]');
      var files = fileInput.files;
      var formData = new FormData(uploadForm);
      for (var i = 0; i < files.length; i++) {
        formData.append('file', files[i]);
      }
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            console.log(xhr.responseText);
          } else {
            console.error(xhr.statusText);
          }
        }
      };
      xhr.open('POST', '/upload');
      xhr.send(formData);
    });
  </script>
</body>
</html>

jQuery版实现文件上传功能

jQuery版实现文件上传功能和原生JS版的实现方式有所不同,jQuery的$.ajax()方法能直接上传文件数据。而且,jQuery也提供了一些便捷的方法方便我们操作表单。

HTML代码

和原生JS版一样,在HTML代码中添加一个表单,表单内包含一个input[type=file]用于选择文件,以及一个按钮用于提交表单。

<form id="uploadForm" enctype="multipart/form-data">
  <input type="file" name="file" multiple>
  <button type="button" id="uploadBtn">上传文件</button>
</form>

JS代码

在JS代码中使用jQuery选择器获取表单元素和按钮元素,对按钮添加点击事件监听器,在点击事件的响应函数中使用$.ajax()方法提交表单数据。

var uploadForm = $('#uploadForm');
var uploadBtn = $('#uploadBtn');
uploadBtn.on('click', function() {
  var formData = new FormData(uploadForm[0]);
  $.ajax({
    type: 'POST',
    url: '/upload',
    data: formData,
    processData: false,
    contentType: false,
    success: function(res) {
      console.log(res);
    },
    error: function(xhr, status, err) {
      console.error(status, err.toString());
    }
  });
});

在以上代码中,需要注意以下几点:

  1. 使用FormData对象构造表单数据时,需要传入表单元素uploadForm[0]作为构造函数的参数。
  2. 在$.ajax()方法中使用type属性设置请求方法,使用url属性设置请求地址,使用data属性设置请求数据,processData属性和contentType属性都设置为false,以便正确处理FormData对象的数据。
  3. success属性和error属性分别代表请求成功和请求失败的回调函数。

示例说明

下面展示一个完整的jQuery版文件上传功能的示例,可与上述代码对照着看。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>jQuery版文件上传</title>
  <script src="https://cdn.bootcss.com/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
  <form id="uploadForm" enctype="multipart/form-data">
    <input type="file" name="file" multiple>
    <button type="button" id="uploadBtn">上传文件</button>
  </form>
  <script>
    var uploadForm = $('#uploadForm');
    var uploadBtn = $('#uploadBtn');
    uploadBtn.on('click', function() {
      var formData = new FormData(uploadForm[0]);
      $.ajax({
        type: 'POST',
        url: '/upload',
        data: formData,
        processData: false,
        contentType: false,
        success: function(res) {
          console.log(res);
        },
        error: function(xhr, status, err) {
          console.error(status, err.toString());
        }
      });
    });
  </script>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS和jQuery版实现文件上传功能 - Python技术站

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

相关文章

  • JS制作简单的三级联动

    下面是关于如何制作简单的三级联动的完整攻略: 1. 准备工作 在开始制作三级联动前,我们需要准备以下工作: HTML结构:需要有三个下拉框用于显示省、市和区。 数据源:需要有一个数据源,用于存储所有的省市区信息。 JS代码:需要用JS代码来实现三级联动的功能。 2. HTML结构 下面是一个简单的HTML结构示例,包含了三个下拉框: <select i…

    jquery 2023年5月28日
    00
  • jQuery+SpringMVC中的复选框选择与传值实例

    首先,在实现jQuery+SpringMVC中的复选框选择与传值的过程中,可以按照以下步骤进行: 在SpringMVC的Controller中定义处理请求的方法,并在方法中使用@RequestParam注解来接收前端传递的参数。 例如: @RequestMapping("/submit") public String submit(@Re…

    jquery 2023年5月28日
    00
  • Javascript/Jquery——简单定时器的多种实现方法

    Javascript/Jquery——简单定时器的多种实现方法 定时器是JavaScript编程中常用的一个功能,用于定时执行一些任务。本文将介绍JavaScript和JQuery中简单定时器的多种实现方法。 JavaScript定时器 setInterval() setInterval() 方法可按照指定周期多次地调用函数或代码片段。语法如下: var i…

    jquery 2023年5月28日
    00
  • jQuery UI Tabs事件选项

    以下是关于 jQuery UI Tabs 事件选项的详细攻略: jQuery UI Tabs 事件选项 事件选项允许您在选项卡小部件上注册事件处理程序,以便在选项卡更改时执行自定义操作。 语法 $(selector).tabs({ activate: function( event, ui ) { // 在选项卡更改时执行的操作 } }); 事件选项 act…

    jquery 2023年5月11日
    00
  • jquery实现百叶窗效果

    讲解如下: 什么是百叶窗效果 百叶窗效果是指在网页上展示图片时,以一定的动画方式将图片分隔成若干根大小相等、相互覆盖的条纹,在条纹之间加上间距,使用过渡样式使条纹依次展示或隐藏的过程。该效果通常会运用到图片幻灯片等场景中。 实现过程 我们首先需要一个HTML结构,使用 ul 和 li 标签创建图片列表,并且需要使用CSS布局和样式,确定图片列表宽度、高度、边…

    jquery 2023年5月18日
    00
  • jQWidgets jqxDraw attr() 方法

    以下是关于“jQWidgets jqxDraw attr() 方法”的完整攻略,包含两个示例说明: 简介 jqxDraw 控件的 attr() 方法用于获取或设置绘元素的属性。该方法可以用于设置绘图元素的位置、大小、颜色等属性。 完整攻略 下面是 jqx 控件 attr() 方法的完整攻略: 设置属性 var rect = draw.rect(100, 10…

    jquery 2023年5月10日
    00
  • 如何用jQuery找到所有的textarea和段落来做一个边框

    要使用jQuery找到所有的textarea和段落,并为它们添加边框,可以使用以下步骤: 步骤1:创建HTML和CSS 首先,我们需要创建一个HTML和CSS,以便在页面中显示一些元素。下面是一个示例HTML和CSS: <!DOCTYPE html> <html> <head> <title>jQuery Bo…

    jquery 2023年5月9日
    00
  • 如何使用jQuery Mobile制作迷你垂直选择

    当您使用jQuery Mobile制作迷你垂直选择时,可以按照以下步骤进行操作: 创建一个HTML文件并引入jQuery Mobile库文件。您可以从jQuery Mobile官方网站下载最新版本的库文件。 <!DOCTYPE html> <html> <head> <meta charset="utf-8…

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