文件上传(显示进度条、上传速度)

XMLHttpRequest对象

使用XMLHttpRequest对象实现数据交互。

//创建XMLHttpRequest对象
let xhr = new XMLHttpRequest(); //let来创建(ES6版本以上)

//为了应对所有的现代浏览器,检查浏览器是否支持 XMLHttpRequest 对象。
//如果支持,则创建XMLHttpRequest对象。如果不支持,则创建 ActiveXObject
var xmlhttp;
if (window.XMLHttpRequest){
   
// IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else{
   
  // IE5, IE6
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

XMLHttpRequest对象有三个重要属性:
1、onreadystatechange
onreadystatechange:存有处理服务器响应的函数,每当 readyState 改变时,onreadystatechange 函数就会被执行。
2、readyState:存有服务器响应的状态信息。从0到4的变化

  • 0: 请求未初始化(代理被创建,但尚未调用 open方法)
  • 1: 服务器连接已建立(open方法已经被调用)
  • 2: 请求已接收(send方法已被调用,且头部和状态已经可获得)
  • 3: 请求处理中(下载中,responseText 属性已经包含部分数据)
  • 4: 请求已完成,且响应已就绪(下载操作已完成)

3、status:服务器响应状态码

  • 200 :OK
  • 404 : 未找到页面
//当 readyState 等于 4 且状态为 200 时,表示响应已就绪。举例如下:
let xhr = new XMLHttpRequest();
xhr.onreadystatechange=function(){
   
  if (xhr.readyState==4 && xhr.status==200){
   
    document.getElementById("myDiv").innerHTML=xhr.responseText;
   }
 }

向服务器发送请求,使用XMLHttpRequest对象的open()send()方法

let xhr = new XMLHttpRequest();
/* open(method,url,async)方法:
   参数method:请求的类型get或者post
   参数url:文件在服务器上的位置
   参数async:true为异步或者false为同步
*/
xhr.open("get","/fileUpload",true);
// send()方法:将请求发送给服务器,如果send方法带参数,只能用于post请求
xhr.send();

post和get请求类型怎么选择?
get比post更简单也更快,并且在大部分情况下都能用。

GET:一般用于信息获取,使用 URL 传递参数,对所发送信息的数量也有限制,一般在2000 个字符
POST:一般用于修改服务器上的资源,对所发送的信息没有限制
也就是说 Get 是通过地址栏来传值,而 Post 是通过提交表单来传值。
在以下情况中,请使用 POST 请求:

  1. 无法使用缓存文件(更新服务器上的文件或数据库)
  2. 向服务器发送大量数据(POST 没有数据量限制)
  3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

FormData对象

使用FormData对象上传文件

 <input type="file" class="myfile">
 进度<progress max="100" value="0"></progress>
 <span class="persent">0%</span>
 速度 <span class="speed">0b/s</span>
 <button class="btn">上传文件</button>
 <button class="btn">取消文件</button>
 <div class
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 jQuery 中实现大文件显示进度条可以使用 XMLHttpRequest 对象和 FormData 对象来实现。以下是一个简单的示例代码: HTML: ```html <input type="file" id="fileInput"> <button id="uploadButton">上</button> <div id="progressBar"></div> ``` JavaScript: ```javascript $(document).ready(function() { $('#uploadButton').click(function() { var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; var formData = new FormData(); formData.append('file', file); var xhr = new XMLHttpRequest(); xhr.open('POST', 'upload.php', true); xhr.upload.onprogress = function(e) { if (e.lengthComputable) { var percent = Math.round((e.loaded / e.total) * 100); $('#progressBar').css('width', percent + '%').text(percent + '%'); } }; xhr.onload = function() { if (xhr.status === 200) { // 上成功 $('#progressBar').text('上完成'); } else { // 上失败 $('#progressBar').text('上失败'); } }; xhr.send(formData); }); }); ``` 在上面的代码中,我们首先获取文件输入框的文件,然后创建一个 FormData 对象,并将文件添加到其中。接下来,我们创建一个 XMLHttpRequest 对象,并设置请求的方法、URL 和异步标志。然后,我们通过监听 `xhr.upload.onprogress` 事件来获取上进度,并更新进度条的宽度和文本。最后,我们监听 `xhr.onload` 事件,在上完成后进行相应的处理。 请注意,上述代码中的 `upload.php` 是一个示例的服务器端处理文件的脚本,你需要根据自己的实际情况进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值