JavaScript实现无刷新上传预览图片功能


Posted in Javascript onAugust 02, 2017

无刷新上传功能如何实现?手写无刷新上传要用到两个东西,FormData和FileReader。

FileReader 用于图片浏览。

FormData 用于ajax请求。

html代码

先创建表单跟图片的容器

<form enctype="multipart/form-data" id="oForm">
    <input type="file" name="file" id="file" onchange="readAsDataURL()" />
    <input type="button" value="提交" onclick="doUpload()" />
  </form>
  <div>
    <img alt="" id="img"/>
  </div>

javascript代码

FormData:

通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对。它可以更灵活方便的发送表单数据, 因为可以独立于表单使用。如果你把表单的编码类型设置为multipart/form-data ,则通过FormData传输 的数据格式和表单通过submit() 方法传输的数据格式相同。

在这里FormData对象是用来获取form表单内的所有input数据,然后使用ajax请求发送数据到指定url,就不会出现表单提交时跳转的情况。

function doUpload() { 
     var formData = new FormData($( "#oForm" )[0]); 
     console.log(formData); 
     $.ajax({ 
       url: 'pp', 
       type: 'POST', 
       data: formData, 
       async: false, 
       cache: false, 
       contentType: false, 
       processData: false, 
       success: function (returndata) { 
         console.log(returndata); 
       }, 
       error: function (returndata) { 
         console.log(returndata); 
       } 
     }); 
  }

FileReader:

FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容, 使用 File 或 Blob 对象指定要读取的文件或数据。

在这里FileReader对象是用来获取file上来的图片并把图片转换成Data URL形式显示在事先创建的 容器中。

function readAsDataURL(){
  //检验是否为图像文件
    var file = document.getElementById("file").files[0];
    if(!/image\/\w+/.test(file.type)){
      alert("看清楚,这个需要图片!");

      return false;
    }else{
    var reader = new FileReader();
    //将文件以Data URL形式读入页面
    reader.readAsDataURL(file);
    reader.onload=function(e){
      var result=document.getElementById("img");
      //显示文件
      result.src= this.result ;
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
提取字符串中年月日的函数代码
Nov 05 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
编写高效jQuery代码的4个原则和5个技巧
Apr 24 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
Jul 04 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
Node.js操作redis实现添加查询功能
May 25 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
详解@angular/cli 改变默认启动端口两种方式
Nov 29 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
Apr 13 Javascript
vue键盘事件点击事件加native操作
Jul 27 Javascript
基于jquery实现多选下拉列表
Aug 02 #jQuery
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 #Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 #Javascript
javascript 取小数点后几位几种方法总结
Aug 02 #Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 #Javascript
jQuery接受后台传递的List的实例详解
Aug 02 #jQuery
angular $watch 一个变量的变化(实例讲解)
Aug 02 #Javascript
You might like
利用PHP实现短域名互转
2013/07/05 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
vue-axios使用详解
2017/05/10 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
如何通过python检查文件是否被占用
2020/12/18 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
酒店销售经理岗位职责
2014/01/31 职场文书
企业承诺书格式
2014/05/21 职场文书
十周年庆典策划方案
2014/06/03 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
社区低保工作总结2015
2015/07/23 职场文书
欢送领导祝酒词
2015/08/12 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL