XHR对象

799 阅读1分钟

一、创建XMLHttpRequest对象

IE9及以上

var xhr = new XMLHttpRequest()

IE9以下

var xhr = new ActiveXObject('Mricosoft.XMLHTTP')

二、XHR请求

.open()

规定请求的类型、URL以及是否异步处理请求

xhr.open(method, url, async)
  • method:必需。请求的类型:GET(get)、POST(post)

  • url:必需。api请求地址

  • async:可选。true(异步)、false(同步)

    xhr.open('get',/api/search,true)

.send()

将请求发送到服务器
xhr.send(string)
  • string:可选。仅用于POST请求

get发送参数

xhr.open('GET''/api/search?a=0&b=1&c=2', true)
xhr.send( )

post发送参数

xhr.open('POST', /api/search, true) 
xhr.send('a=0&b=1&c=2')                       // URLSearchParams 参数 
xhr.send(JSON.stringify( { a:0, b:1 } ))      // JSON 字符串参数

三、XHR响应

response

返回响应的正文,返回的类型为ArrayBufferBlobDocumentJavaScriptObjectDOMString中的一个,这取决于 responseType 属性。

  • 语法
const body = xhr.response
  • 示例

    xhr.open('GET', /api/search, true) xhr.send( ) const body = xhr.response

四、XHR状态

readyState

  • 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化 
  • 每当 readyState 改变时,就会触发 onreadystatechange 事件

const state = xhr.readyState

**readyState** 的值

0  UNSENT		:请求未初始化(代理被创建,但尚未调用 open( ) 方法)
1  OPENED		:服务器连接已建立(open( )方法已经被调用)
2  HEADERS_RECEIVED	:请求已接收(send( )方法已经被调用,并且头部和状态已经可获得)
3  LOADING		:请求处理中(下载中;responseText 属性已经包含部分数据)
4  DONE			:请求已完成,且响应已就绪(下载操作已完成)
  • 示例

    xhr.onreadystatechange(function( ){ if(xhr.readyState === 4){ const data = xhr.responseText } if(this.readyState === 4){ const data = this.responseText } })

status

返回请求结果

const status = xhr.status

**status** 的值

200 : OK,请求成功
400 : 未找到页面
500 : 服务器错误
  • 示例

    xhr.onreadystatechange(function( ){ if(xhr.status === 200){ const data = xhr.responseText } if(this.status === 200){ const data = this.responseText } })