目录
Ajax概念
Ajax(Asynchronous JavaScript + XML):异步JavaScript和XML,是为了网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面;
Ajax的使用步骤
1.创建请求对象
var xhr=new XMLHttpRequest();
这里命名尽量用xhr
2.调用open方法
open方法中需要传入两个参数,分别为请求方式和请求地址
//请求方式为get
xhr.open("get","请求地址?需要请求的数据")
//请求方式为post
xhr.open("post","请求地址")
3.设置请求头(可选)
这里如果请求方式为post需要设置请求头
xhr.setRequestHeader('Content-type","application/x-www-form-urlencoded")
为什么要加请求头
默认情况下, 服务器对POST请求和提交web表单的请求并不会一视同仁. 因此, 服务器端必须有程序来读取发送过来的原始数据, 并从中解析出有用的部分
4.监听响应事件
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
//获取响应体
xhr.responseText
//请求xml
xhr.responseXML
补充
- 这里为什么不用onload事件
- onload事件在IE8及以下不兼容,监控不到
- 为什么要写xhr.readyState==4判断条件
要了解这个需要先知道XMLHttpRequest.readyState 属性返回一个 XMLHttpRequest 代理当前所处的状态。并且XHR 代理总是处于下列状态中的一个:
- 0 UNSENT
XMLHttpRequest 代理已被创建, 但尚未调用 open() 方法。
-1 OPENED
open() 方法已经被触发。在这个状态中,可以通过 setRequestHeader() 方法来设置请求的头部, 可以调用 send() 方法来发起请求。 - 2 HEADERS_RECEIVED
send() 方法已经被调用,响应头也已经被接收。 - 3 LOADING
响应体部分正在被接收。如果 responseType 属性是“text”或空字符串, responseText 将会在载入的过程中拥有部分响应数据。 - 4 DONE
请求操作已经完成。这意味着数据传输已经彻底完成或失败。
注意: 在IE中,状态有着不同的名称,并不是 UNSENT,OPENED , HEADERS_RECEIVED , LOADING 和 DONE, 而是 READYSTATE_UNINITIALIZED (0),READYSTATE_LOADING (1) , READYSTATE_LOADED (2) , READYSTATE_INTERACTIVE (3) 和 READYSTATE_COMPLETE (4) 。
所以在这里我们一般直接控制条件等于4,一方面是为了兼容IE,另外的一个方面是因为当状态为4的时候是确定数据完全传输完成
- 为什么要有status条件
- 首先只读属性 XMLHttpRequest.status 返回了XMLHttpRequest 响应中的数字状态码。status 的值是一个无符号短整型。
- 在请求完成前,status的值为0。值得注意的是,如果 XMLHttpRequest 出错,浏览器返回的 status 也为0。
- status 200 代表一个成功的请求。如果服务器响应中没有明确指定status码,XMLHttpRequest.status 将会默认为200。
- 常见的几种状态
200:请求成功
404:没有发现文件、查询或url
400~499:客户端问题
500 :服务端问题
控制为200这样就可以确定请求成功
- 当需要得到的部分是xml多次获取不到或者获取为null时,可能是需要转换
// 1.创建转换对象
var parser=new DOMParser();
//2.调用转换方法
var obj=parser.parserFromString(需要转换的内容,需要转换的类型)
- 当然我们也需要熟悉JSON的两种方法
- JSON.parse() 将JSON数据转换为数组或者对象
- JSON.stringify() 将对象或者数组转换为JSON对象
Ajax和form的提交
- ajax在提交、请求、接收时,都是异步进行,网页不需要刷新,只刷新页面局部,不关心也不影响页面其他部分的内容。
Form提交则是新建一个页面,哪怕是提交给自己本身的页面,也需要刷新,为了维持页面用户对表单的状态改变,要在控制器和模板之间传递更多参数以保持页面状态。 - ajax提交时,是在后台新建一个请求。
Form却是放弃本页面,然后再请求。 - ajax必须要用js来实现,存在调试麻烦、浏览器兼容问题,而且不启用js的浏览器,无法完成操作。
Form表单是浏览器自带的,无论是否开启js,都可以提交表单。 - ajax在提交、请求、接收时,整个过程都需要使用程序来对其进行数据处理。
Form表单提交,是根据表单结构自动完成,不需要代码干预。用submit提交。
Ajax中JSON和XML
JSON
概念
- JSON 英文全称 JavaScript Object Notation
- JSON 是一种轻量级的数据交换格式。
- JSON是独立的语言 *
- JSON 易于理解。
语法
- 数据为 键/值 对。
- 数据由逗号分隔。
- 大括号保存对象
- 方括号保存数组
xml
概念
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
两者之间的差别
- JSON 是一个轻量级的数据格式 XML是重量级
- JSON 相对于 XML而言,数据体积小,传递的速度比较快。
- JSON与javascript的交互更加方便,更容易解析处理。
- JSON对数据的描述性比 XML 差。
- JSON 的速度要远远快于 XML。
- JSON仅支持UTF-8编码;XML支持各种编码。
- JSON的安全性较低;XML比JSON更安全