function ajax(options, callback){
var xmlhttp = null;
var url = options.url;
var method = options.method.toLocaleLowerCase() || 'get';
var data = options.data
if (window.XMLHttpRequest) { // 1.创建XMLHttpRequest对象
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) { //针对某些特定版本的mozillar浏览器的BUG进行修正
xmlhttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) { //针对IE6,IE5.5,IE5
var activexName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ]; //两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中
for ( var i = 0; i < activexName.length; i++) {
try {
xmlhttp = new ActiveXObject(activexName[i]); //取出一个控件名进行创建,如果创建成功就终止循环 ,如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建
if(xmlhttp){
break;
}
} catch (e) {
console.log(e)
}
}
}
var paramArr = []
var encodeData
if (data instanceof Object) {
for (var key in data) {
paramArr.push( encodeURIComponent(key) + '=' + encodeURIComponent(data[key]) ) // 参数拼接需要通过 encodeURIComponent 进行编码
}
encodeData = paramArr.join('&')
}
if (method === 'get') { // 检测 url 中是否已存在 ? 及其位置
var index = url.indexOf('?')
if (index === -1) url += '?'
else if (index !== url.length -1) url += '&' // 拼接 url
url += encodeData
}
xmlhttp.open(method, url); // 2.使用open方法设置和服务器的交互信息
if (method === 'get') xmlhttp.send(null) // 3.发送请求
else {
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8'); // post 方式需要设置请求头
xmlhttp.send(encodeData)
}
xmlhttp.onreadystatechange = function() { // 响应函数
if(xmlhttp.readyState ==4 && xmlhttp.status==200) {
callback(xmlhttp.responseText)
}
}
}
function getData(data){
console.log('请求成功', data)
}
ajax({
url: 'your request url',
method: 'get',
data: {
name: 'rashomon',
age: 13
}
},getData)