Ajax简介

什么是Ajax

什么是Ajax,通常用八字来表示它的核心:异步加载,局部刷新。Ajax就是为了实现在不重新加载整个网页的情况下,只对网页的某一部分进行局部的更新。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。

1.异步(Asynchronous)

了解Ajax前,我们要先了解什么是异步。 异步的底层原理是单线程加事件队列,js的代码执行时单线程的,所谓单线程:就是js代码时从上到下按顺序依次执行的,一次只能做一件事情也就是所谓的同步。而事件队列可以看作一个容器,这个容器存储着js的回调函数,只有js代码执行结束后,才会去事件队列中调用这些回调函数这就是异步。而我们的Ajax,是通过使用XMLHttpRequest对象与Web服务器进行异步数据通信。

2.XMLHttpRequest

XMLHttpRequest 是浏览器内建对象,用于在后台与服务器通信(交换数据),由此我们便可实现对网页的部分更新,而不是刷新整个页面。兼容性:在IE6以前不是用XMLHttpRequest创建的,使用ActiveXObject对象来创建的。

3.请求

ajax中有两种请求方式,GET和POST两种请求

3.1 GET请求

代码如下

var xhr = new XMLHttpRequest();

//设置请求行 open (请求方法, 请求url)
	//get请求如果有参数就需要在url后面拼接参数
	//post请求在请求体中传递
xhr.open('get', 'index.php?'+name);

//设置请求头 setRequestHeader('key', 'value')
	//get方式不需要设置请求头
	//post需要设置 Content-Type: application/x-www-form-urlencoded
//设置 请求体: 发送请求  send(参数: key=value&key=value)
	//如果有参数,post应该在这个位置来传递参数
	//对于get请求不需要再这个位置来传递参数
xhr.send(null);

3.2 POST请求

  //1.让异步对象发送post请求
  //1.11创建异步对象
  var xhr = new XMLHttpRequest();
  //1.2设置请求行 open(请求方式, 请求url)
  	//1.get 需要在url后面拼接参数
 	//2.post 不需要拼接参数
  xhr.open("post","001.php?"+name)
  //1.3设置请求头: setRequestHeader()
 	 //1.get不需要设置
   	 //2.posr需要设置 Content-Type: application/x-www-form-urlencoded
  xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  //1.4设置请求体 send()
  	//1.get的参数在url中拼接了,所以不需要在这个中设置
  	//2.post的参数在这个函数张设置
  xhr.send('name=itcast&age=10');

4.响应

HTTP响应是由服务端发出的,作为客户端更应关心的是响应的结果。
HTTP响应3个组成部分与XMLHttpRequest方法或属性的对应关系。
由于服务器做出响应需要时间,所以我们需要监听服务器响应的状态,然后才能进行处理。
onreadystatechange 是 Javascript 的事件的一种,其意义在于监听 XMLHttpRequest 的状态 ,一般监听readstate和status
readstate 属性有五个状态:
xhr.readyState = 0时,(未初始化)还没有调用send()方法
xhr.readyState = 1时,(载入)已调用send()方法,正在发送请求
xhr.readyState = 2时,(载入完成)send()方法执行完成,已经接收到全部响应内容
xhr.readyState = 3时,(交互)正在解析响应内容
xhr.readyState = 4时,(完成)响应内容解析完成,可以在客户端调用了
xhr.status表示响应码,如200
xhr.statusText表示响应信息,如OK
检测并判断响应头的MIME类型后确定使用request.responseText或者request.responseXML
代码如下

//响应报文:
//报文行: 响应状态码 响应状态信息 200 ok
//报文头: 服务器返回给客户端的一些额外的信息
//报文体: 服务器返回给客户端的数据 responseText: 普通字符串 responseXML: 符合xml格式的字符串
//xhr.status可以获取当前服务器的响应状态
//一个真正的响应应该两个方面: 1.服务器成功响应 2.数据已经回到客户端并且可以使用了
//监听异步对象响应状态 readystate
xhr.onreadystatechange = funciton () {
  if(xhr.readyState == 4 && xhr.status == 200) {
   	//responseText或responseXML;
  }
}
上一篇:Ajax请求的五个步骤


下一篇:手写ajax 请求并将获取到的图片二进制流渲染到页面上