详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

yizhihongxing

一、介绍

本文是《详解XMLHttpRequest》系列的第二篇。在第一篇文章中,我们深入学习了XMLHttpRequest对象的用法、属性和方法。在本文中,我们将了解更多的响应属性、二进制数据和监测上传、下载进度的相关知识。

二、响应属性

在发送XMLHttpRequest请求后,可以使用以下响应属性来获取请求的响应。

1. responseText

responseText属性返回作为响应主体被返回的文本。

当响应的内容类型是"text/plain"、"text/html"或"application/xml"时,可以使用responseText属性获取响应的纯文本内容。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.php', true);
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    console.log(xhr.responseText);
  }
};
xhr.send();

在上面的代码中,“example.php”是服务器的响应文件,响应类型为"text/plain"、"text/html"或"application/xml"。

2. responseXML

responseXML属性返回包含响应数据的XML对象。

当响应的内容类型是"application/xml"或"text/xml"时,可以使用responseXML属性获取响应的XML对象。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.xml', true);
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    console.log(xhr.responseXML);
  }
};
xhr.send();

在上面的代码中,“example.xml”是服务器的响应文件,响应类型为"application/xml"或"text/xml"。

3. status

status属性返回响应的HTTP状态码。

当请求成功完成时,status属性的值是200;当请求被重定向时,status属性的值是300,301,302或307;当请求失败时,status属性的值是400或更高;当服务器错误时,status属性的值是500或更高。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.php', true);
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4){
    if(xhr.status === 200){
      console.log('请求成功');
    }else{
      console.log('请求失败');
    }
  }
};
xhr.send();

在上面的代码中,“example.php”是服务器的响应文件。

4. statusText

statusText属性返回响应的HTTP状态文本。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.php', true);
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4){
    console.log(xhr.status, xhr.statusText);
  }
};
xhr.send();

在上面的代码中,“example.php”是服务器的响应文件。

三、二进制数据

XMLHttpRequest可以发送和接收二进制数据。

1. responseType

responseType属性用于设置响应类型。

当responseType属性设置为"arraybuffer"时,响应数据将以ArrayBuffer对象的形式返回。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.png', true);
xhr.responseType = 'arraybuffer';
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    var blobUrl = URL.createObjectURL(new Blob([xhr.response]));
    console.log(blobUrl);
  }
};
xhr.send();

在上面的代码中,“example.png”是服务器的响应文件,响应数据为图片二进制数据。

2. response

response属性包含请求的响应数据。

当requestType属性设置为"arraybuffer"时,response属性返回ArrayBuffer对象。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.png', true);
xhr.responseType = 'arraybuffer';
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    var img = new Image();
    img.onload = function(){
      document.body.appendChild(img);
    };
    img.src = URL.createObjectURL(new Blob([xhr.response]));
  }
};
xhr.send();

在上面的代码中,“example.png”是服务器的响应文件,响应数据为图片二进制数据。

四、监测上传下载进度

可以使用XMLHttpRequest对象的progress事件来监测上传和下载的进度。

1. 上传进度

可以使用XMLHttpRequest对象的upload属性来获取上传进度。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload.php', true);
xhr.upload.onprogress = function(evt){
  if(evt.lengthComputable){
    console.log('上传进度:' + evt.loaded + '/' + evt.total);
  }
};
xhr.send(new FormData(document.getElementById('form')));

在上面的代码中,“upload.php”是服务器的响应文件,“form”是提交的表单。

2. 下载进度

可以使用XMLHttpRequest对象的onprogress事件来获取下载进度。

示例代码:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'example.png', true);
xhr.onprogress = function(evt){
  if(evt.lengthComputable){
    console.log('下载进度:' + evt.loaded + '/' + evt.total);
  }
};
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4 && xhr.status === 200){
    var img = new Image();
    img.onload = function(){
      document.body.appendChild(img);
    };
    img.src = URL.createObjectURL(new Blob([xhr.response]));
  }
};
xhr.responseType = 'arraybuffer';
xhr.send();

在上面的代码中,“example.png”是服务器的响应文件,响应数据为图片二进制数据。

五、总结

本文介绍了XMLHttpRequest对象的响应属性、二进制数据和监测上传下载进度的相关知识,通过示例代码进行了详细的讲解。阅读本文可以帮助你更好地理解XMLHttpRequest的相关知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript Array splice 方法

    以下是关于JavaScript Array splice方法的完整攻略。 JavaScript Array splice方法 JavaScript Array splice方法用于向数组中添加或删除元素。该方法会改变原始数组,并返回被删除元素。 下面是一个使用splice方法的示例: var arr = [1, 2, 3, 4, 5]; arr.splice…

    JavaScript 2023年5月11日
    00
  • JavaScript 使用技巧精萃(.net html

    JavaScript 使用技巧精萃 在本文中,将介绍一些 JavaScript 的使用技巧,帮助开发者更高效地编写 JavaScript 代码。 1. 少用全局变量 全局变量在 JavaScript 中是非常常见的,但过多的使用全局变量可能会导致代码混乱、难以维护。所以,尽量减少使用全局变量。可以使用 ES6 的 let 或 const 关键字来定义块级变量…

    JavaScript 2023年5月18日
    00
  • nuxt中使用路由守卫的方法步骤

    下面是详细讲解”nuxt中使用路由守卫的方法步骤”的完整攻略。 什么是路由守卫? 路由守卫是用来监听路由跳转的钩子函数,我们可以在路由跳转过程中对路由做出一些拦截或者其他操作,比如登录校验、数据埋点等。 Nuxt中使用路由守卫的方法步骤 1. 在 nuxt.config.js 中配置路由 要使用路由守卫,必须先在 nuxt.config.js 中配置好路由,…

    JavaScript 2023年6月11日
    00
  • 用javascript实现截取字符串包含中文处理的函数

    下面我将详细讲解如何使用 JavaScript 实现截取字符串包含中文处理的函数。 函数实现思路 在 JavaScript 中,一个英文字符和一个中文字符所占用的字节数是不同的。一个英文字符占用 1 个字节,而一个中文字符占用 2 个字节。因此,在截取字符串时,不能直接按照字符个数进行截取,否则会出现截取的字符串超出范围或截取不完整的情况。具体实现思路是使用…

    JavaScript 2023年5月28日
    00
  • vue任意关系组件通信与跨组件监听状态vue-communication

    “vue任意关系组件通信与跨组件监听状态vue-communication”是一个Vue.js插件,它提供了在Vue.js中任意关系组件间通信和跨组件的状态监听机制。下面是详细的攻略: 安装 使用npm安装: npm install vue-communication –save 或者使用yarn安装: yarn add vue-communication…

    JavaScript 2023年6月11日
    00
  • 纯javascript代码实现计算器功能(三种方法)

    当我们想在网页中添加一个计算器功能的时候,可以使用Javascript来实现。以下是三种使用Javascript实现计算器功能的方法: 方法一:利用eval()函数计算表达式 在HTML文档中添加以下代码: <div id="container"> <input type="text" id=&quo…

    JavaScript 2023年5月27日
    00
  • JavaScript动态创建二维数组的方法示例

    下面是”JavaScript动态创建二维数组的方法示例”的完整攻略。 1. 什么是二维数组 二维数组是由多个一维数组组成的数组,每个一维数组可以当成是一个表格中的一行,多个一维数组就可以组成一个表格。 2. 创建二维数组 创建二维数组的方法有很多种,我们这里介绍两种常见的方法。 方法一:使用嵌套的for循环来创建二维数组 //创建一个3行4列的二维数组,并将…

    JavaScript 2023年5月27日
    00
  • 详解如何利用Nodejs构建多进程应用

    对于如何利用Nodejs构建多进程应用,我们可以采用以下的攻略: 1. 为什么要构建多进程应用? 在Nodejs中,主进程只能利用单核CPU的资源,无法充分利用多核CPU的优势,因此,我们可以通过构建多进程应用来实现多核CPU资源的充分利用,提高Nodejs服务器的性能和并发能力。 2. Nodejs的进程模块 在Nodejs中,有一个内置的进程模块chil…

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