一、Ajax的实现主要分为四部分:
1、创建Ajax对象
1 // 创建ajax对象
2 var xhr = null;
3 if(window.XMLHttpRequest){
4 xhr = new XMLHttpRequest();
5 } else {
6 //为了兼容IE6
7 xhr = new ActiveXObject('Microsoft.XMLHTTP');
8 }
2、连接服务器
// 连接服务器open(方法GET/POST,请求地址, 异步传输)
xhr.open('GET', 'data.txt', true);
3、发送请求
4、接收返回数据
1 // 处理返回数据
2 /*
3 ** 每当readyState改变时,就会触发onreadystatechange事件
4 ** readyState属性存储有XMLHttpRequest的状态信息
5 ** 0 :请求未初始化
6 ** 1 :服务器连接已建立
7 ** 2 :请求已接受
8 ** 3 : 请求处理中
9 ** 4 :请求已完成,且相应就绪
10 */
11 xhr.onreadystatechange = function(){
12 if(xhr.readyState == 4){
13 /*
14 ** Http状态码
15 ** 1xx :信息展示
16 ** 2xx :成功
17 ** 3xx :重定向
18 ** 4xx : 客户端错误
19 ** 5xx :服务器端错误
20 */
21 if(xhr.status == 200){
22 success(xhr.responseText);
23 } else {
24 if(failed){
25 failed(xhr.status);
26 }
27 }
28 }
29 }
二、Ajax封装函数:
1 function Ajax(type, url, data, success, failed){
2 // 创建ajax对象
3 var xhr = null;
4 if(window.XMLHttpRequest){
5 xhr = new XMLHttpRequest();
6 } else {
7 xhr = new ActiveXObject('Microsoft.XMLHTTP')
8 }
9
10 var type = type.toUpperCase();
11 // 用于清除缓存
12 var random = Math.random();
13
14 if(typeof data == 'object'){
15 var str = '';
16 for(var key in data){
17 str += key+'='+data[key]+'&';
18 }
19 data = str.replace(/&$/, '');
20 }
21
22 if(type == 'GET'){
23 if(data){
24 xhr.open('GET', url + '?' + data, true);
25 } else {
26 xhr.open('GET', url + '?t=' + random, true);
27 }
28 xhr.send();
29
30 } else if(type == 'POST'){
31 xhr.open('POST', url, true);
32 // 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
33 xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
34 xhr.send(data);
35 }
36
37 // 处理返回数据
38 xhr.onreadystatechange = function(){
39 if(xhr.readyState == 4){
40 if(xhr.status == 200){
41 success(xhr.responseText);
42 } else {
43 if(failed){
44 failed(xhr.status);
45 }
46 }
47 }
48 }
49 }
50
51 // 测试调用
52 var sendData = {name:'asher',sex:'male'};
53 Ajax('get', 'data/data.html', sendData, function(data){
54 console.log(data);
55 }, function(error){
56 console.log(error);
57 });