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

一、介绍

本文是《详解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日

相关文章

  • 简单了解Ajax表单序列化的实现方法

    下面是“简单了解Ajax表单序列化的实现方法”的完整攻略。 一、什么是Ajax表单序列化? Ajax表单序列化是AJAX(Asynchronous JavaScript and XML,异步JavaScript和XML)技术中的一种常见用法,它可以将表单中的数据自动转换成一组用于HTTP POST请求或GET请求的字符串。这个字符串可以被传递到服务器端,用于…

    JavaScript 2023年5月19日
    00
  • 获取表单控件原始(初始)值的方法

    获取表单控件原始值的方法,通常是用于表单的重置操作或是表单提交前的数据检查。以下是一些常见的方法: 1. 通过JavaScript获取表单元素的value属性 JavaScript提供了访问文档元素的属性的方法,包括表单元素的value属性。通过获取表单元素的value属性,可以得到该元素的初始值。 示例1: <form> <input t…

    JavaScript 2023年6月10日
    00
  • JavaScript Event学习第七章 事件属性

    下面给你详细讲解 JavaScript Event 学习第七章 事件属性的完整攻略。 事件属性 事件属性是针对事件对象提供的属性,通过这些属性可以获取事件的各种信息。下面是常见的事件属性: 1. type type属性用于返回事件类型,是必需的。例如: element.addEventListener(‘click’, function(event) { c…

    JavaScript 2023年6月11日
    00
  • Jquery Ajax学习实例 向页面发出请求,返回XML格式数据

    让我们来详细讲解一下JQuery Ajax学习实例,这里我会给出两个示例说明,为了方便描述,我会分成步骤来讲解。 基本概念 在开始之前,我们需要先理解一些基本概念。 AJAX AJAX 是一种与服务器交换数据并更新部分网页而不重载整个页面的技术。AJAX 不是新技术,它是使用了已有的技术,是一种将客户端脚本和服务器端脚本进行异步通信的技术。 JSON JSO…

    JavaScript 2023年6月11日
    00
  • js实现文字列表无缝滚动效果

    实现文字列表无缝滚动效果有多种方法,其中一种常用的实现方式是使用JavaScript和CSS结合的方法。 以下是实现文字列表无缝滚动效果的具体步骤: 1. 准备HTML结构 首先,需要在HTML文件中添加一个无序列表(ul),该列表包含所有需要滚动显示的文本元素(li),例如: <ul id="scroll-list"> &l…

    JavaScript 2023年6月11日
    00
  • javascript中href和replace的比较(详解)

    JavaScript中href和replace的比较(详解) 在JavaScript中,href和replace方法都可以用来改变当前页面的URL地址,但它们有着不同的用法和效果。本文将详细介绍这两种方法的差异并提供相关示例,以帮助读者更好地理解。 href方法 使用href方法可以通过在当前窗口中打开新的URL地址。该操作会导致当前页面的所有状态丢失,包括…

    JavaScript 2023年6月11日
    00
  • javascript求日期差的方法

    当我们需要计算两个日期之间的差值时,可以使用JavaScript中内置的方法来帮助我们进行计算。下面是一些常用函数的示例说明。 方法1:使用getTime()方法求日期差 使用new Date()创建两个日期对象 通过调用getTime()方法获取两个日期对象的时间戳 用两个时间戳相减得到日期差 示例代码如下: let date1 = new Date(‘2…

    JavaScript 2023年5月27日
    00
  • js 调用本地exe的例子(支持IE内核的浏览器)

    下面将详细讲解“JS 调用本地 EXE 的例子(支持 IE 内核的浏览器)”的完整攻略,并提供两条示例。 准备工作 在进行本地 EXE 执行前,需要进行以下准备工作: 在服务器上放置本地 EXE 程序。 使用本地服务器,将前端代码放置于本地服务器上,这样才能执行本地 EXE 程序。 使用 IE 内核的浏览器,否则无法执行本地 EXE 程序。 JS 调用本地 …

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