-
是一种用于创建快速动态网页的技术
-
可以使网页实现异步更新,无需加载整个页面,对某部分进行更新
-
优点:
- 页面无需刷新
- 异步通讯,更快的响应能力
-
缺点
- 不能后退
- 不能用url访问
- 存在安全问题
- 破坏程序的异常机制
-
ajax的特点
- 可以实现动态不刷新,也就是局部刷新。具体就是在不更新整个页面的前提下维护数据。这使得web应用程序更为迅速的回应用户动作,并避免了在网络上发送那些没有改变过的信息
-
原生JS中ajax请求有几个步骤?
- 创建xmlHttpRequest对象
var xhr = new XmlHttpRequest- 规定请求的类型,url以及是否异步处理
xhr.open('get',url,true)- 设置请求头
xhr.setRequestHeader(header,value)- get请求不用设置,post需要设置
- header:一般设置
'content-Type',传输数据类型 - value: 具体的数据类型,常用
'application/x-www-form-urlencoded'和'application/json'
- 发送请求
xhr.send(null)- 括号内是xhr请求中要发送的请求体,根据请求头中的类型传参,如果是get请求,可以传null或不传参
- 指定xhr状态变化事件处理函数
xhr.onreadyStatechange = function(){ if(this.readyState === 2){ //接收到响应体 console.log('接收成功!',xhr.readyState) }else if(this.readyState === 3){ //响应体加载中 console.log('loading!',xhr.readyState) }else if(this.readyState === 4){ //加载完成 console.log('加载完成!',xhr.readyState) } }- 一般都是在readyState为4时,执行响应的后续逻辑
- readyState属性
- 0:UNSENT,表示代理xhr被创建,当尚未调用open方法
- 1:OPENED,表示open方法以及被调用,建立了连接
- 2:HEADERS_RECEIVED,表示send方法已经被调用,并且已经可以获取状态行和响应头
- 3:LOADING,表示响应体下载中,responseText属性可能已经包含部分数据
- 4:表示响应体下载完成,可以直接使用responseText
- 注意:
- 设置请求头setRequestheader必须在open()和send()之间
- get方法不用设置请求头,send()中不用设置请求体,传null或不传即可
- open()方法第三个参数要求传入一个布尔值,其作用就是设置此次请求是否采用异步方式执行,默认为true,即异步方式。如果需要同步执行可以传false,此时,代码会卡在send(),等到所有数据都传输完成,才会往下执行
- 问题
- 同步执行的时候,onreadyStatechange事件不会触发
- 因为onreadyStatechange事件只有在readyState变化时才触发。同步执行的时候,全部数据传输完了,readyState将不会再变化,此时注册onreadyStatechange事件,也不会再被触发
- 解决方法
- 因为同步执行会卡在send(),等数据传输完才执行下一步,所以可以再发请求send()之前,先注册onreadyStatechange事件
- 同步执行的时候,onreadyStatechange事件不会触发
- 响应式数据格式
- XML(已淘汰)
-
淘汰原因;
- 数据冗余太多。用来描述数据的数据占用数据量比较大,不利于大量数据的网络传输
- js解析方法比较复杂,不方便使用
- xml代码
<booklist> <book> <name> xxx <name/> <auth> yyy <auth/> <book/> <booklist/>
-
- JSON(一种轻量级的数据交换格式)
-
全称: JavaScript Object Notaion 对象表示法
-
数据描述手段,类似js字面量方式
- 与对象字面量的区别
- JSON不需要存储在变量里
- 结束时不需要写分号
- 属性名需要加引号
//对象字面量 var obj = { name:'xxx', age:14 }; //JSON { "name":'xxx', age:'12' } - 与对象字面量的区别
-
- XML(已淘汰)
- ES5新增JSON对象
- JSON.parse()
- 参数:字符串(符合JSON格式)
- 返回值:转换成一个对象
- JSON.stringify()
- 参数:对象
- 返回值:字符串(符合JSON格式)
- JSON.parse()
- http创建的状态码
- 2开头(表示成功处理请求)
- 200:表示服务器已经成功处理了请求
- 3开头(表示要完成请求,需要进一步操作,通常用来重定向)
- 304:自从上次请求后,网页未修改过,服务器不会返回网页内容
- 4开头(表示请求可能出错,妨碍了服务器的处理)
- 400:错误请求,服务器不理解请求的语法
- 403:服务器拒绝请求
- 404:服务器找不到请求的网页
- 5开头(表示服务器错误)
- 建议找后端打一架
- 2开头(表示成功处理请求)