标签:
回归下原生js,网上看到的AJAX封装,遂拿来改改,不知还有何弊端,望指出!
1 var ajaxHelper = { 2 /*1.0 浏览器兼容的方式创建异步对象*/ 3 makeXHR: function () { 4 //声明异步对象变量 5 var xmlHttp = false; 6 //声明 扩展 名 7 var xmlHttpObj = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "MSXML.XMLHttp"]; 8 //判断浏览器是否支持 XMLHttpRequest,如果支持,则是新式浏览器,可以直接创建 9 if (window.XMLHttpRequest) { 10 xmlHttp = new XMLHttpRequest(); 11 } 12 //否则,只能循环遍历老式浏览器异步对象名,尝试创建,知道创建成功为止 13 else if (window.ActiveXObject) { 14 for (i = 0; i < xmlHttpObj.length; i++) { 15 xmlHttp = new ActiveXObject(xmlHttpObj[i]); 16 if (xmlHttp) { 17 break; 18 } 19 } 20 } 21 //判断 异步对象 是否创建 成功,如果 成功,则返回异步对象,否则返回false 22 return xmlHttp ? xmlHttp : false; 23 }, 24 /*2.0 发送Ajax请求*/ 25 doAjax: function (method, url, data, isAyn, callback, type) { 26 method = method.toLowerCase(); 27 //2.1创建异步对象 28 var xhr = this.makeXHR(); 29 //2.2设置请求参数(如果是get,则带url参数,如果不是,则不带) 30 xhr.open(method, url + (method == "get" ? "?" + data : ""), isAyn); 31 //2.3根据请求谓词(get/post),添加不同的请求头 32 if (method == "get") { 33 xhr.setRequestHeader("If-Modified-Since", 0); 34 } else { 35 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 36 } 37 //2.4设置回调函数 38 xhr.onreadystatechange = function () { 39 //如果接受完毕 服务器发回的 响应报文 40 if (xhr.readyState == 4) { 41 //判断状态码是否正常 42 if (xhr.status == 200) { 43 if (type.toLowerCase() == "json") { 44 var ret = {}; 45 try { 46 if (typeof JSON != "undefined") { 47 ret = JSON.parse(xhr.responseText); 48 } else { 49 //IE8以下不支持JSON 50 ret = new Function("return " + xhr.responseText)(); 51 } 52 callback(ret); 53 } catch (e) { 54 console.log(e.message); 55 callback(false); 56 } 57 } else { 58 //直接返回文本 59 callback(xhr.responseText); 60 } 61 } else { 62 console.log("AJAX Status Code:" + xhr.status); 63 callback(false); 64 } 65 } 66 }; 67 //2.5发送(如果是post,则传参数,否则不传) 68 xhr.send(method != "get" ? data : null); 69 }, 70 /*3.0 直接发送Post请求*/ 71 doPost: function (url, data, isAyn, callback, type) { 72 this.doAjax("post", url, data, isAyn, callback, type); 73 }, 74 /*4.0 直接发送Get请求*/ 75 doGet: function (url, data, isAyn, callback, type) { 76 this.doAjax("get", url, data, isAyn, callback, type); 77 } 78 };
假设一个需求,后端要求传入两个数字n1、n2,然后返回总和。
当其中一个参数为空或者不是数字时,返回:{"status":"0", "msg":"参数有误!"}
当正确的时候,返回:{"status":"1", "sum":"//n1加n2的和"}
后端的代码就不贴出来了。
前端调用:
1 document.getElementById("btnSubmit").onclick = function () { 2 ajaxHelper.doPost("后端url", "n1=10&n2=25", true, function (ret) { 3 if (!ret) { return; } 4 if (ret.status != 1) { 5 alert(ret.msg); 6 return; 7 } 8 var n = ret.sum; 9 var s = ret.status; 10 }, "json"); 11 };
标签:
原文地址:http://www.cnblogs.com/shousiji/p/5663086.html