原生AJAX封裝的簡單實現_AJAX相關

來源:互聯網
上載者:User

迴歸下原生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封裝的簡單實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.