迴歸下原生js,網上看到的AJAX封裝,遂拿來改改,不知還有何弊端,望指出!
var ajaxHelper = { /*1.0 瀏覽器安全色的方式建立非同步對象*/ makeXHR: function () { //聲明非同步物件變數 var xmlHttp = false; //聲明 擴充 名 var xmlHttpObj = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "MSXML.XMLHttp"]; //判斷瀏覽器是否支援 XMLHttpRequest,如果支援,則是新式瀏覽器,可以直接建立 if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } //否則,只能迴圈遍曆老式瀏覽器非同步對象名,嘗試建立,知道建立成功為止 else if (window.ActiveXObject) { for (i = 0; i < xmlHttpObj.length; i++) { xmlHttp = new ActiveXObject(xmlHttpObj[i]); if (xmlHttp) { break; } } } //判斷 非同步對象 是否建立 成功,如果 成功,則返回非同步對象,否則返回false return xmlHttp ? xmlHttp : false; }, /*2.0 發送Ajax請求*/ doAjax: function (method, url, data, isAyn, callback, type) { method = method.toLowerCase(); //2.1建立非同步對象 var xhr = this.makeXHR(); //2.2佈建要求參數(如果是get,則帶url參數,如果不是,則不帶) xhr.open(method, url + (method == "get" ? "?" + data : ""), isAyn); //2.3根據請求謂詞(get/post),添加不同的要求標頭 if (method == "get") { xhr.setRequestHeader("If-Modified-Since", 0); } else { xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } //2.4設定回呼函數 xhr.onreadystatechange = function () { //如果接受完畢 伺服器發回的 響應報文 if (xhr.readyState == 4) { //判斷狀態代碼是否正常 if (xhr.status == 200) { if (type.toLowerCase() == "json") { var ret = {}; try { if (typeof JSON != "undefined") { ret = JSON.parse(xhr.responseText); } else { //IE8以下不支援JSON ret = new Function("return " + xhr.responseText)(); } callback(ret); } catch (e) { console.log(e.message); callback(false); } } else { //直接返迴文本 callback(xhr.responseText); } } else { console.log("AJAX Status Code:" + xhr.status); callback(false); } } }; //2.5發送(如果是post,則傳參數,否則不傳) xhr.send(method != "get" ? data : null); }, /*3.0 直接發送Post請求*/ doPost: function (url, data, isAyn, callback, type) { this.doAjax("post", url, data, isAyn, callback, type); }, /*4.0 直接發送Get請求*/ doGet: function (url, data, isAyn, callback, type) { this.doAjax("get", url, data, isAyn, callback, type); }};
假設一個需求,後端要求傳入兩個數字n1、n2,然後返回總和。
當其中一個參數為空白或者不是數字時,返回:{"status":"0", "msg":"參數有誤!"}
當正確的時候,返回:{"status":"1", "sum":"//n1加n2的和"}
後端的代碼就不貼出來了。
前端調用:
document.getElementById("btnSubmit").onclick = function () { ajaxHelper.doPost("後端url", "n1=10&n2=25", true, function (ret) { if (!ret) { return; } if (ret.status != 1) { alert(ret.msg); return; } var n = ret.sum; var s = ret.status; }, "json");};
以上這篇原生AJAX封裝的簡單實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援雲棲社區。