XMLHttpRequest对象使用指南

本文详细介绍了XMLHttpRequest的基本概念、浏览器支持情况、新老版本的功能对比,以及提供了完整的属性与方法汇总。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XMLHttpRequest是一种可以在JavaScript语言中按照HTTP协议向服务器发送数据请求的浏览器API。

它解决了在不刷新页面的情况下动态获取外部服务器数据,是ajax以及axios的基础(fetch除外,它是浏览器原生的API)。

浏览器对XMLHttpRequest对象的支持

IE5.0 版本开始以 ActiveX 组件形式支持 XMLHttpRequest,IE 7.0 版本开始标准化 XMLHttpRequest。不过所有浏览器实现的 XMLHttpRequest 对象都提供相同的接口和用法。

var xhr = null;
if (window.XMLHttpRequest) {
    // IE7以上以及其它浏览器
    xhr = new XMLHttpRequest();
} else {
    // IE6以及以下版本
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

兼容所有浏览器方法

//兼容不同浏览器和版本得创建函数数组
var XHR = [  
    function () { return new XMLHttpRequest () },
    function () { return new ActiveXObject ("Msxml2.XMLHTTP") },
    function () { return new ActiveXObject ("Msxml3.XMLHTTP") },
    function () { return new ActiveXObject ("Microsoft.XMLHTTP") }
];
var xhr = null;
//尝试调用函数,如果成功则返回XMLHttpRequest对象,否则继续尝试
for (var i = 0; i < XHR.length; i ++) {
    try {
        xhr = XHR[i]();
    } catch(e) {
        continue  //如果发生异常,则继续下一个函数调用
    }
    break;  //如果成功,则中止循环
}

XMLHttpRequest新老版本功能对比

功能区别XHR1XHR2

支持数据类型不同

xhr.send(type data)

只支持文本字符串

支持多种类型,包括:

字符串、JSON

二进制(Blob)、二进制数组(ArrayBuffer)

Document对象(XML/HTML)

Form表单(FormData)

是否支持数据传送进度

xhr.onprocess(event) {

    if(event.lengthComputable) {

        event.loaded/event.total

    }

}

不支持数据传送进度

即没有返回当前传送长度

支持数据传送进度

event.lengthComputable为true

event.loaded

event.total

跨域请求CORS不支持

支持跨域请求

设置xhr.withCredentials = true

HTTP请求超时限制不支持

支持超时限制

设置xhr.timeout = 1000

上传文件

不支持

由于XHR1只支持字符串,

因此无法上传二进制文件

支持上传文件

var file = new Blob(['hello'], {type:'text/plain'});

xhr.send(file);

XMLHttpRequest对象属性与方法汇总

属性方法属性介绍

xhr.onreadystatechange

可写,所有浏览器都支持

xhr.readystatuschange

状态变化监听程序,每次readyState发生改变都会触发这个事件

xhr.onreadystatechange = function() {

    // 监听xhr当前状态

    if (xhr.readyState == 4) {

        // 成功

    }

}

xhr.readyState

只读

整数值,表示实例当前状态,只读,可能值:

0:表示实例已经创建,但还没有调用open方法

1:表示已经调用open方法,但还没执行send方法

2:表示send已经执行,服务器已经返回头部与状态码

3:表示正在接收服务器的数据体部分(body)

4:表示数据接收完毕或者接收失败

xhr.open()

设置HTTP请求参数

xhr.open(string method, string url,

optional boolean async, optional string user, optional string pass)

后面三个参数为非必填项

async默认为true代表异步请求,user & pass为认证用户信息

xhr.setRequestHeader()

设置发送请求的头部信息,若多次设置则合并

该方法必须放在open()之后,send()之前

xhr.setRequestHeader("Content-Type", "application/json");

xhr.setRequestHeader("Content-Length", JSON.stringify(data).length);

xhr.send()

发送HTTP请求

xhr.send(optional data)

参数为非必填项,代表发送的数据体

类型可为:String/JSON/Document/Blob/ArrayBuffer/FormData

FormData为DOM对象,代表发送表单

var formData = new FormData();

formData.append("email", "....");

xhr.send(formData);

xhr.upload()

上传文件,返回一个对象,可以对该对象事件进行监控

var file = new Blob(['hello world'], {type: 'text/plain'})

xhr.upload.onprogress = function (e) {
    if (e.lengthComputable) {}

}

xhr.send(file);

xhr.overrideMimeType()

设置指定的MIME类型覆盖服务器返回的真实类型

必须在send()方法之前调用

xhr.getResponseHeader()

xhr.getAllResponseHeaders()

返回服务器的HTTP头部信息

var lastModified = xhr.getResponseHeader("Last-Modified");

var headers = xhr.getAllResponseHeaders();

xhr.responseType

可写

字符串,表示服务器返回的数据类型,可能值:

"":空字符串,文本文件,等同于text

"text":字符串

”json“:JSON对象

"document":Document对象,文档对象,比如HTML/XML

"blob":Blob对象,二进制对象,比如图片文件等

”arraybuffer“:ArrayBuffer对象,二进制数组

xhr.responseText

只读

从服务器接收到的字符串,HTTP请求完成后该属性内容才会完整

xhr.responseXML

只读

从服务器接收到的HTML/XML对象,注意要想生效需:

1. 设置HTTP的Content-Type为text/xml或application/xml

2. responseType为document

xhr.response从服务器接收到的数据体部分,相比responseText该属性支持更多的类型,比如JSON、Document,二进制等
xhr.responseURL

字符串,表示请求服务器的真实URL地址

注:与原始请求地址可能不同,因为服务器可能会跳转

xhr.status/xhr.statusText

只读

整数,表示服务器返回的HTTP状态码,如果服务器没有返回这个属性的默认值是200

200(OK)

301(Moved Permanetly), 302(Moved Temporarily)

304(Not Modified) 307(Temporary Redirect)

401(Unauthorized),403(Forbidden), 404(Not Found)

500(Internal Server Error)

xhr.withCredentials

布尔值,默认为false,表示跨域请求时用户信息是否包含在请求头中

如果设置为true,会发送和设置服务器的Cookie,服务器端必须显式返回:

Acces-Controll-Allow-Credentials: true

xhr.timeout

xhr.ontimeout

设置服务器时间超时,若设为0则代表无时间限制

xhr.load

xhr.onload

服务器请求成功

xhr.abort

xhr.onabort

服务器请求终止

xhr.error

xhr.onerror

服务器请求失败

xhr.loadstart

xhr.onloadstart

服务器开始请求(HTTP请求发出)

xhr.progress

xhr.onprogress

正在向服务器发送和加载数据

xhr.onprogress = function(event) {

    console.log(event.total); console.log(event.loaded);

}

xhr.loadend

xhr.onloadend

服务器请求完成,包括成功和失败
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值