javascript-深入理解XMLHttpRequest对象(一)

XMLHttpRequest对象

XMLHttpRequest对象是浏览器提供的向服务器请求和解析响应数据的接口。

XMLHttpRequest Level1(版本1)

XHR对象由IE最早提出,并在之后所有主流浏览器都实现了该对象。最初使用该对象的方式被称作版本1。
function getJSON1 (url, callback) {
     var xhr = new XMLHttpRequest()
     // 请求/响应的当前活动阶段变化时,触发该方法
     xhr.onreadystatechange = function () {
         if (xhr.readyState === 4 && xhr.status === 200) {
             callback(xhr.responseText)
         }
     }
     xhr.open('GET', url)
     xhr.send(null)
 }
 get方式请求接口,必须将参数与url拼接,形成如下格式的字符串
 http://localhost/findByName?name=wujiang&id=1
 open()方法第三个参数默认为异步调用,默认值为true

XMLHttpRequest Level2(版本2)

在XHR得到广泛接受后,W3C将其规范化,并对XHR进行升级、规范,形成了XMLHttpRequest Level2的规范。

这里写图片描述

function getJSON1 (url, callback) {
     var xhr = new XMLHttpRequest()
     // 请求成功时
     xhr.onload= function () {
         callback(xhr.responseText)
     }
     xhr.open('GET', url)
     xhr.send(null)
 }

设置请求头

function submitData (url, callback) {
    varxhr = new XMLHttpRequest()
    xhr.onload = function () {
        callback(xhr.responseText)
    }
    xhr.open('POST', url, true)
    // 设置请求头,以post表单的方式发送请求,参数格式为'a=1&b=2c=yyy'
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    xhr.send('name=wujiang&id=1')
}
当以POST方式发送请求时,请求参数必须通过send()方法传递,且请求头必须设置在
open()方法和send()方法之间。如果以表单的方式发送请求,需设置Content-Type
值为'application/x-www-form-urlencoded',且其数据格式为'a=1&b=2'。
若以json格式发送请求,需设置Content-Type值为'application/json',
且其数据格式为json字符串,即JSON.Stringify(obj),obj为javascript对象。

跨浏览器创建XHR对象

// 跨浏览器创建XMLHttpRequest对象
function createXHR () {
    if (typeof XMLHttpRequest !== 'undefined') {
      return new XMLHttpRequest();
    } else if (typeof ActiveXObject !== 'undefined') {
      if (typeof arguments.callee.activeXString !== 'string') {
        var versions = ['MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.3.0',
            'MSXML2.XMLHttp'
          ],
          i, len

        for (i = 0, len = versions.length; i < len; i++) {
          try {
            new ActiveXObject(versions[i])
            arguments.callee.activeXString = versions[i]
            break
          } catch (e) {
          }
        }
      }
      return new ActiveXObject(arguments.callee.activeXString)
    } else {
      throw new Error('No XHR object available.')
    }
}

参考

https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#event-xhr-load
http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值