什么是AJAX

AJAX的起源:

IE 5 率先在 JS 中引入 ActiveX 对象(API),使得 JS 可以直接发起 HTTP 请求。
随后 Mozilla、 Safari、 Opera 也跟进(抄袭)了,取名 XMLHttpRequest,并被纳入 W3C 规范。Jesse James Garrett 讲如下技术取名叫做 AJAX:异步的 JavaScript 和 XML。

AJAX具体包括以下步骤:

1.创建XMLHttpRequest实例;
2.发出http请求
3.接收服务器传回的数据
4.更新网页数据
概括起来就是一句话:AJAX通过原生的XMLHttpRequest对象发出HTTP请求,得到服务器返回的数据后,再进行处理。
现在服务器返回的都是JSON格式的数据了,XML格式已经过时了,但是AJAX这个名字已经成了一个通用名词,字面含义已经消失了。

XMLHttpRequest对象是AJAX的主要接口,用于浏览器与服务器之间的通信,尽管名字里面有XML和http,它实际上可以使用多种协议(比如file或ftp),发送任何格式的数据(包括字符串和二进制)
XMLHttpRequest本身是一个构造函数,可以使用new命令生成实例,它没有任何参数,一旦建成实例,就可以使用open()方法发出HTTP请求:

myButton.addEventListener('click',(e) => {
    let Aa = new XMLHttpRequest() //创建
    Aa.open('GET','xxx.com') //初始化
    Aa.send() //发送
})
Aa.open('接收一个method','接受一个url','询问是否异步,一般都是默认true')
// 三步操作,创建一个对象,初始化它,然后发送它

在AJAX出现以前,人们发请求可以通过form,a,img,link,script,但是这几种方式都有各自的缺陷,form会刷新或者新开页面,a只能发get请求,并且也会刷新或者新开页面,img可以发送get请求,但是只能以图片的形式展示,link可以发get请求,但是只能以CSS,favicon的形式展示,script可以发get请求,但是只能以脚本的形式运行。

AJAX问世以后,通过open()方法,就可以发get,post,put,delete请求

readyState 请求的五种状态

当值为0的时候,表示未打开,open()方法还未被调用
当值为1的时候,表示未发送,send()方法还未被调用
当值为2的时候,表示已获取响应头,send()方法已经被调用,响应头和相应状态已返回
当值为3的时候,表示正在下载响应体,响应体下载中,responseText中已经获取部分数据
当值为4的时候,表示请求完成,整个请求过程已经完毕。
ps:如果XML很长,浏览器不可能一下子就下载完,所以浏览器有个优化方式就是下载多少告诉你多少,所以有可能2的过程很长。
pss:0,1,2,3,4这五个过程必须是依次逐个经过的,
psss:如果状态是4,表示已经把响应下载完毕了

onreadystatechange

onreadystatechange可以捕获所有readyState状态码的改变

例:

mybutton.addEventListener('click',(e) => {
    let request = new XMLHttpRequest() //创建对象
    //监听这个对象的readyState变化
    request.onreadystatechange = () => {
      if(request.readyState === 4){ //状态码为4表示请求完成
          if(request.status >= 200){  
          let string = request.responseText
          //把符合JSON语法的字符串转换成JS对应的值
          let object = window.JSON.parse(string)
      }else if(request.status >= 400){ 
              console.log('请求失败')
              }
          }
      }
    request.open('get','/xxx') //初始化对象
    request.send() //发送他
})

以上代码整个过程就是请求,响应,然后解析,parse就是解析字符串是什么意思,然后把它变成一个JS的对应的值。

AJAX其实只有四行代码:
1.创建对象 let xx = new XMLHttpRequest()
2.配置对象 xx.open('get','http://xxx.com:80')
3.发送 xx.send()
4.监听这个对象的readystate状态码,判断readystate和status

xx.onreadystatechange = () => {
  if(xx.readyState === 4){
    if(xx.status >= 200){}else if(xx.status >=400){}
}
}

通过AJAX我们可以任意设置请求的四部分中的所有东西,也可以获取响应中四个部分的所有内容,这就是AJAX的厉害之处。

JS设置任意请求header:
设置第一部分: xxx.open('get','/xxx')
设置第二部分:xxx.setHeader('content-Type','x-www-form-urlencoded')
第三部分不用设置,因为它就是一个回车
设置第四部分:xxx.send('a=1&b=2')

JS获取任意响应header
获取第一部分:状态码可以通过 xxx.status获取;ok以及no可以通过 xxx.statusText获取
获取第二部分:xxx.getResponseHeader()或者xxx.getAllResponseHeader()
获取第四部分:xxx.responseText

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容

  • 大家好,我是IT修真院深圳分院第3期的学员,一枚正直纯洁善良的前端程序员,今天给大家分享一下,修真院官网前端工程师...
    大大头大阅读 7,597评论 1 72
  • 一.什么是 AJAX ? AJAX = 异步 JavaScript 和 XML。AJAX 是一种用于创建快速动态网...
    没梦想的咸鱼丶阅读 923评论 0 0
  • 什么是Ajax 目录 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考...
    冷眸_c6b8阅读 273评论 0 0
  • 1.背景介绍 什么是AJAX? 即异步的 JavaScript 和 XML,是一种用于创建快速动态网页的技术; 传...
    情的信仰阅读 274评论 0 0
  • 大家好,我是IT修真院成都分院第7期的学员韩建名,一枚正直纯洁善良的WEB前端程序员。 目录 1.背景介绍 2.知...
    inh_阅读 339评论 0 0