手动封装AJAX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// (1) web浏览器
// (2) ajax对象
// (3) 初始化 HTTP 请求参数(请求方式, 地址, 同步or异步)
// (4) 发送请求
// (5) 监控数据
// (6) 检查数据 使用


// (1) web浏览器
function ajax(method, url, callback, data, flag) { // 封装ajax flag为true时表示异步
// (2) ajax对象
var xml = null;
if(window.XMLHttpRequest) {
xml = new XMLHttpRequest();
}else {
xml = new ActiveXObject('Microsoft.XMLHttp');
}
// (3) 初始化 HTTP 请求参数(请求方式, 地址, 同步异步)
// (4) 发送请求
method = method.toUpperCase(); //保证它们都是大写的
if(method == 'GET') {
var date = new Date(); //时间戳,其原因是因为GET请求是有缓存的(当你用GET请求向同一个URL多次发送请求的时候,它会有缓存),POST请求是没有缓存的
var timer = date.getTime();
// GET请求的值是拼接在URL后面的
xml.open(method, url +'?'+data + '&timer='+timer, flag); //初始化 HTTP 请求参数(请求方式, 地址, 同步异步)
xml.send(); //发送请求
}else if(method == 'POST') {
xml.open(method, url, flag); //初始化 HTTP 请求参数(请求方式, 地址, 同步异步)
// POST请求需要注意在传值之前,需要告诉服务器我传的是一个什么类型的值。
// 如果不告诉服务器,服务器是不知道的,它没有那么的智能。
// 在这里'application/x-www-form-urlencoded'是一个固定的写法不能乱写,它表示我传的类型在服务器中是一个url编码格式。
xml.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // POST请求时需要,GET请求时不需要
xml.send(data); //发送请求
}
// (5) 监控数据 0 1 2 3 4
xml.onreadystatechange = function () {
if(xml.readyState == 4) {
// (6) 检查数据 使用
if(xml.status == 200) {
callback(xml.responseText);
}
}
}
}