zoukankan      html  css  js  c++  java
  • [XHR]——重新认识 XMLHttpRequest

    细说XMLHttpRequest如何使用

    先来看一段使用XMLHttpRequest发送Ajax请求的简单示例代码。

    function sendAjax() {
      //构造表单数据
      var formData = new FormData();
      formData.append('username', 'johndoe');
      formData.append('id', 123456);
      //创建xhr对象 
      var xhr = new XMLHttpRequest();
      //设置xhr请求的超时时间
      xhr.timeout = 3000;
      //设置响应返回的数据格式
      xhr.responseType = "text";
      //创建一个 post 请求,采用异步
      xhr.open('POST', '/server', true);
      //注册相关事件回调处理函数
      xhr.onload = function(e) { 
        if(this.status == 200||this.status == 304){
            alert(this.responseText);
        }
      };
      xhr.ontimeout = function(e) { ... };
      xhr.onerror = function(e) { ... };
      xhr.upload.onprogress = function(e) { ... };
      
      //发送数据
      xhr.send(formData);
    }
    

    设置request header

    var client = new XMLHttpRequest();
    client.open('GET', 'demo.cgi');
    client.setRequestHeader('X-Test', 'one');
    client.setRequestHeader('X-Test', 'two');
    // 最终request header中"X-Test"为: one, two
    client.send();
    
    • 方法的第一个参数 header 大小写不敏感,即可以写成content-type,也可以写成Content-Type,甚至写成content-Type;
    • Content-Type的默认值与具体发送的数据类型有关,请参考本文【可以发送什么类型的数据】一节;
    • setRequestHeader必须在open()方法之后,send()方法之前调用,否则会抛错;
    • setRequestHeader可以调用多次,最终的值不会采用覆盖override的方式,而是采用追加append的方式。下面是一个示例

    获取上传、下载的进度

    xhr.onprogress = updateProgress;
    xhr.upload.onprogress = updateProgress;
    function updateProgress(event) {
        if (event.lengthComputable) {
          var completedPercent = event.loaded / event.total;
        }
     }
    

    在上传或者下载比较大的文件时,实时显示当前的上传、下载进度是很普遍的产品需求。
    我们可以通过onprogress事件来实时显示进度,默认情况下这个事件每50ms触发一次。需要注意的是,上传过程和下载过程触发的是不同对象的onprogress事件:

    • 上传触发的是xhr.upload对象的 onprogress事件
    • 下载触发的是xhr对象的onprogress事件

    转:https://segmentfault.com/a/1190000004322487#articleHeader11

  • 相关阅读:
    第08组 Alpha冲刺 (2/6)
    第08组 Alpha冲刺 (1/6)
    结对编程作业
    第01组 Alpha冲刺总结
    第01组 Alpha冲刺(6/6轮)
    第01组 Alpha冲刺(6/6)
    第01组 Alpha冲刺(5/6)
    第01组 Alpha冲刺(5/6轮)
    第01组 Alpha冲刺(4/6)
    第01组 Alpha冲刺(3/6)
  • 原文地址:https://www.cnblogs.com/fayin/p/6497019.html
Copyright © 2011-2022 走看看