ajax.js
2.1 KB
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
function ajax(options) {
options = options || {}; //调用函数时如果options没有指定,就给它赋值{},一个空的Object
options.type = (options.type || "GET").toUpperCase(); /// 请求格式GET、POST,默认为GET
options.dataType = options.dataType || "json"; //响应数据格式,默认json
var params = formatParams(options.data); //options.data请求的数据
var xhr;
//考虑兼容性
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveObject) { //兼容IE6以下版本
xhr = new ActiveXobject('Microsoft.XMLHTTP');
}
//启动并发送一个请求
if (options.type == "GET") {
xhr.open("GET", options.url + "?" + params, true);
xhr.send(null);
} else if (options.type == "POST") {
xhr.open("post", options.url, true);
//设置表单提交时的内容类型
//Content-type数据请求的格式
xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
xhr.send(params);
}
// 设置有效时间
setTimeout(function() {
if (xhr.readySate != 4) {
xhr.abort();
}
}, options.timeout)
// 接收
// options.success成功之后的回调函数 options.error失败后的回调函数 //xhr.responseText,xhr.responseXML 获得字符串形式的响应数据或者XML形式的响应数据
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var status = xhr.status;
if (status >= 200 && status < 300 || status == 304) {
options.success && options.success(xhr.responseText, xhr.responseXML);
} else {
options.error && options.error(status);
}
}
}
}
//格式化请求参数
function formatParams(data) {
var arr = [];
for (var name in data) {
arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));
}
arr.push(("v=" + Math.random()).replace(".", ""));
return arr.join("&");
}