Ajax入门(二)Ajax函数封装
/** * 一个简单的get请求 * @param {String} url 请求地址,文件名 * @param {Function} fnSucc 请求成功时执行的函数 * @param {Function} fnFaild 请求失败执行的函数 */ function AJAX(url,fnSucc,fnFaild) { //1.创建ajax对象 var oAjax = null; /** * 此处必须需要使用window.的方式,表示为window对象的一个属性.不存在时值为undefined. * 进入else若直接使用XMLHttpRequest在不支持的情况下会报错 **/ if (window.XMLHttpRequest) { //IE6以上 oAjax = new XMLHttpRequest(); } else { oAjax = new ActiveXObject("Microsoft.XMLHTTP"); } //2.连接服务器 //open(方法,url,是否异步) oAjax.open("GET",true); //3.发送请求 oAjax.send(); //4.接收返回 //OnRedayStateChange事件 oAjax.onreadystatechange = function () { if (oAjax.readyState === 4) { if (oAjax.status === 200) { // alert("成功" + oAjax.responseText); fnSucc(oAjax.responseText); } else { // alert("服务器响应失败!"); if (fnFaild) { fnFaild(); } } } }; } 为什么要继续进行Ajax函数封装?
改造目标function ajax(url,options) { // your implement } options是一个对象,里面可以包括的参数为:
改造开始(三步)(一)原函数的改造形参中,删除 //4.接收返回 oAjax.onreadystatechange = function () { if (oAjax.readyState === 4) { if (oAjax.status === 200) { //请求成功。形参为获取到的字符串形式的响应数据 options.onsuccess(oAjax.responseText); } else { //先判断是否存在请求失败函数 //存在时,形参为XMLHttpRequest对象,便于进行错误进行处理 if (options.onfail) { options.onfail(oAjax); } } } }; (二)请求参数的处理
实现思路:
实现如下:原: //2.连接服务器 //open(方法,是否异步) oAjax.open("GET",true); 现: //open(方法,是否异步) var param = "";//请求参数。 //判断data存在时缓存它,不存在时,设为0 var data = options.data ? options.data : 0; if(typeof(data)==="object"){//只有data为对象使才执行 for (var key in data){//请求参数拼接 if (data.hasOwnProperty(key)) { param += key+"="+data[key]+"&"; } } param.replace(/&$/,"");//去除结尾的&。 }else{ param= "timestamp=" + new Date().getTime(); } //2.连接服务器 oAjax.open("GET",url+"?"+param,true); (三)请求类型选择
实现思路:
实现如下:原: //2.连接服务器 oAjax.open("GET",true); 现: //3.发送请求 var type = options.type ? options.type.toUpperCase() : "GET" ; if(type ==="GET"){ oAjax.open("GET",true); oAjax.send(); }else{ oAjax.open("POST",true); oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); oAjax.send(param); } 最终完成
/** * AJAX函数封装 * @param {string} url 请求地址(必须) * @param {object} options 发送请求的选项参数 * @config {string} [options.type] 请求发送的类型。默认为GET。 * @config {Object} [options.data] 需要发送的数据。 * @config {Function} [options.onsuccess] 请求成功时触发,function(oAjax.responseText,oAjax)。(必须) * @config {Function} [options.onfail] 请求失败时触发,function(oAjax)。(oAJax为XMLHttpRequest对象) * *@returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象 */ function AJAX(url,options) { //1.创建ajax对象 var oAjax = null; /** * 此处必须需要使用window.的方式,表示为window对象的一个属性.不存在时值为undefined,进入else * 若直接使用XMLHttpRequest,在不支持的情况下会报错 **/ if (window.XMLHttpRequest) { //IE6以上 oAjax = new XMLHttpRequest(); } else { oAjax = new ActiveXObject("Microsoft.XMLHTTP"); } //2.连接服务器 //open(方法,是否异步) var param = ""; //请求参数。 //只有data存在,且为对象使才执行 var data = options.data ? options.data : -1; //缓存data if (typeof (data) === "object") { for (var key in data) { //请求参数拼接 if (data.hasOwnProperty(key)) { param += key + "=" + data[key] + "&"; } } param.replace(/&$/,""); } else { param = "timestamp=" + new Date().getTime(); } //3.发送请求 var type = options.type ? options.type.toUpperCase() : "GET"; if (type === "GET") { oAjax.open("GET",url + "?" + param,true); oAjax.send(); } else { oAjax.open("POST",true); oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); oAjax.send(param); } //4.接收返回 //OnRedayStateChange事件 oAjax.onreadystatechange = function () { if (oAjax.readyState === 4) { if (oAjax.status === 200) { //请求成功。形参为获取到的字符串形式的响应数据 options.onsuccess(oAjax.responseText,oAjax); } else { //先判断是否存在请求失败函数 //存在时,形参为XMLHttpRequest对象,便于进行错误进行处理 if (options.onfail) { options.onfail(oAjax); } } } }; return oAjax;//发送请求的XMLHttpRequest对象 }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |