XMLHttpRequest API

本文介绍如何使用XMLHttpRequest实现二进制数据的发送与接收,包括设置响应类型、监听上传进度及处理请求状态等内容。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

jquery ajax就是根据XMLHttpRequest level1进行封装异步请求,可惜目前它的版本不支持接收和传送二进制数据。XMLHttpRequest level2的诞生引入了很多新的api,例如可以接收和传送二进制数据,传输过程中的也添加了更细致的事件监听。

先来个demo,发送二进制数据,详细demo参考http://blog.csdn.net/yingxiake/article/details/50990511

var methodType = "POST";
var url = "/whats/task/xmlHttpRequest";
var req = new XMLHttpRequest(); //新建对象
req.responseType = "json";   //返回数据类型是json格式

req.onload = function(){//上传成功事件回调
    var result = req.response ;
    console.log("onload");
};
req.onprogress = function(){ //上传进度控制
    console.log("onprogress");
};
/**
 * 前端是<input type = "file" id = "myfile" />
 * 文件上传
 */
document.getElementById("myfile").onchange = function(){
    req.open(methodType,url);  //打开路径
    var file = document.getElementById("myfile").files[0];
    req.send(file); //发送二进制文件
}

接下来补下api笔记,下面遇到问题,直接查看api

XMLHttpRequest 属性列表

  1. XMLHttpRequest.readyState 只读

    对象状态,有以下几种状态

    状态描述
    0UNSENT对象已经建立,但还没有调用open方法
    1OPENED已经调用open的方法
    2HEADERS_RECEIVED已经调用open方法,头部信息已经是可用的
    3LOADING正在加载,服务器已经返回一些数据
    4DONE整个发送和接收数据完成
  2. XMLHttpRequest.responseType

    设置服务器返回的数据类型,类似jq ajax参数的,有以下几种类型

    数据类型描述
    “”DOMString默认值,就是string类型,默认值
    “arraybuffer”ArrayBuffer二进制缓冲数据类型
    “blob”Blob二进制数据
    “document”Document文档对象,content-type为application/xml
    “json”JSONjson对象类型,content-type为application/plain
    “text”DOMStringstring类型
  3. XMLHttpRequest.response 只读

    服务器返回的数据,数据类型可以根据responseType来设置

  4. XMLHttpRequest.responseText 只读

    服务器返回文本类型

  5. XMLHttpRequest.status 只读

    服务器返回的状态码,例如200表示请求成功

  6. XMLHttpRequest.statusText 只读

    服务器返回状态文本,例如”200 OK”

  7. XMLHttpRequest.timeout

    设置请求超时时间,超时时会发一个事件,可以在ontimeout接收处理

  8. XMLHttpRequest.withCredentials

    boolen值,默认是false,表示是否需要跨域请求数据,当然得服务器设置允许跨域才可以

  9. XMLHttpRequest.upload

    封装上传事件类型,xmlhttprequest 进度类型有俩种,上传和下载进度,upload为上传事件类型,他有和下载类型一样的abort,load,loadend,progress等等事件

XMLHttpRequest事件列表

  1. XMLHttpRequestEventTarget.onabort

    请求被停止时的回调,当调用abort方法会触发此回调方法

  2. XMLHttpRequestEventTarget.onerror

    请求过程发生意外的回调

  3. XMLHttpRequestEventTarget.onload

    请求成功获取数据成功的回调

  4. XMLHttpRequestEventTarget.onloadstart

    开始请求数据的回调

  5. XMLHttpRequestEventTarget.onprogress

    请求进度的回调,可以用来做进度调

  6. XMLHttpRequestEventTarget.ontimeout

    请求延时的回调函数,只有当设置timeout的时间的时候,才会触发回调

  7. XMLHttpRequestEventTarget.onloadend

    请求结束的回调,不管请求是否成功!!

XMLHttpRequest 方法列表

  1. void abort(); 停止请求过程

  2. DOMString getAllResponseHeaders();

    获取所有的响应头

  3. DOMString? getResponseHeader(DOMString header);

    通过头部key来获取响应头

  4. void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password);

    开始请求服务器

    属性名说明
    methodPOST ,GET 等
    url请求路径
    async是否异步,默认是异步,可选
    user用户名,可选
    password密码,可选
  5. void overrideMimeType(DOMString mime);
    将服务器返回的二进制数据伪装成文本数据,并且告诉浏览器这是用户自定义的字符集,level1就是这样子解决获取二进制数据的,这样获取二进制值需要进一步进行接下

    req.overrideMimeType("text/plain; charset=x-user-defined");
  6. void send(param);

    开始发送数据,根据param参数的不同可以发送不同的数据类型到服务器,可以是以下参数

    描述
    ArrayBuffer数组缓存二进制数据,已不建议用
    ArrayBufferView二进制视图数据
    Blob二进制数据,file对象是它的子类,继承于他
    Documentdocuemnt对象
    FormData模拟表单数据对象,可用于文件异步上传
  7. void setRequestHeader(DOMString header, DOMString value);

    设置请求头部信息,例如setRequestHeader(“content-type”,”image/png”)

参考文档

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值