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)