Shiliew 植树人

ajax实现原理

2017-02-17

  以前看过ajax的实现原理,果然没过多久就忘了,都忘了自己看过。今天重新学习一遍,并且记录下来,希望给自己留下更深刻的印象。而且不往底层说的话,其实实现原理也蛮简单的,记下一些重要的部分,大概知道原理就够了,毕竟平时更多的也只是应用。

简介

  Ajax:Asynchronous javascript and xml,主要是为了客户端与服务器的异步数据交互,当然也是可以同步的。其原理或者说过程就是利用XMLHttpRequest对象发送请求,通过JavaScript将返回的结果显示到页面上。

XMLHttpRequest

  所有现代浏览器均支持XMLHttpRequest对象(IE5和IE6使用ActiveXObject)。

  创建XMLHttpRequest的代码如下:

var xmlHttp;
function createXMLHttpRequest(){
	if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		xmlHttp = new ActiveXObject("MIcrosoft.XMLHTTP");
	}
}

XMLHttpRequest对象属性

  • readyState :对象状态值(0:未初始化;1:初始化;2:发送数据;3:接受数据;4:完成)
  • onreadystatechange :状态改变触发事件
  • status :从服务器返回的http状态码,如404,200
  • statusText :http状态码文本,如OK,Not Found
  • responseText :服务器返回的字符串
  • responseXML :服务器返回的DOM兼容文档数据对象

异步通信

  XMLHttpRequest对象通过open()和send()两个方法发送请求。open()包括method、url和async三个参数:method表示请求方式,如POST和GET;url表示请求地址;async表示同步(false)或异步(true)。send()接受一个String入参,仅用于POST,其它方式传入null。

//get
xmlHttp.open("get", url, true);
xmlHttp.send();

//post
xmlHttp.open("post", url, true);
xmlHttp.send("param=date");

  发送请求之后,readyState发生改变就会触发onreadystatechange事件。根据相应的状态,JavaScript可以对页面的DOM元素进行相应的操作。

//回调函数
function callback(){
	//状态判断及相应操作
}

xmlHttp.open("post", url, true);
xmlHttp.onreadystatechange = callback;
xmlHttp.send();

个人总结

  ajax的基本原理就是利用浏览器支持XMLHttpRequest对象去发送请求,然后根据状态和返回结果使用JavaScript去改变DOM元素。知道open、send方法,同时记住readyState的状态就基本理解了ajax的基本实现原理。


上一篇 装饰者模式

Comments

comments powered by HyperComments