91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在微信小程序中對網絡請求接口進行封裝

發布時間:2021-03-09 16:43:07 來源:億速云 閱讀:234 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關怎么在微信小程序中對網絡請求接口進行封裝,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

網絡請求封裝實例

實現定制要求和方便調用,對微信小程序的網絡請求接口進行了封裝

  1. 封裝位置:app.js,方便全局調用

  2. 實現方法調用,只用關注接口url和入參

  3. 默認和自定義的請求成功、失敗和完成的回調處理

  4. 可設置請求失敗自動重新請求的次數

  5. 可以防止重復提交

  6. 每個請求設定requestCode

代碼

直接將這個方法放在了app.js中

/**
  * 接口公共訪問方法
  * @param {Object} urlPath 訪問路徑
  * @param {Object} params 訪問參數(json格式)
  * @param {Object} requestCode 訪問碼,返回處理使用
  * @param {Object} onSuccess 成功回調
  * @param {Object} onErrorBefore 失敗回調
  * @param {Object} onComplete 請求完成(不管成功或失敗)回調
  * @param {Object} isVerify 是否驗證重復提交
  * @param {Object} requestType 請求類型(默認POST)
  * @param {Object} retry 訪問失敗重新請求次數(默認1次)
  */
 webCall: function (urlPath, params, requestCode, onSuccess, onErrorBefore, onComplete, isVerify, requestType, retry) {
  var params = arguments[1] ? arguments[1] : {};
  //var requestCode = arguments[2] ? arguments[2] : 1;
  var onSuccess = arguments[3] ? arguments[3] : function () { };
  var onErrorBefore = arguments[4] ? arguments[4] : this.onError;
  var onComplete = arguments[5] ? arguments[5] : this.onComplete;
  var isVerify = arguments[6] ? arguments[6] : false;
  var requestType = arguments[7] ? arguments[7] : "POST";
  var retry = arguments[8] ? arguments[8] : 1;
  var that = this;

  //防止重復提交,相同請求間隔時間不能小于500毫秒
  var nowTime = new Date().getTime();
  if (this.requestCount[urlPath] && (nowTime - this.requestCount[urlPath]) < 500) {
   return;
  }
  this.requestCount[urlPath] = nowTime;
  //是否驗證重復提交
  if (isVerify) {
   if (this.verifyCount[urlPath]) {
    return;
   }
   this.verifyCount[urlPath] = true; //重復驗證開關開啟
  }

  console.log("發起網絡請求, 路徑:" + (that.apiHost + urlPath) + ", 參數:" + JSON.stringify(params));
  wx.request({
   url: that.apiHost + urlPath,
   data: params,
   method: requestType, // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
   header: {
    'content-type': requestType == 'POST' ?
     'application/x-www-form-urlencoded' : 'application/json'
   }, // 設置請求的 header
   success: function (res) {
    console.log("返回結果:" + JSON.stringify(res.data));
    if (res.data) {
     if (res.data.statusCode == 200) { //訪問成功
      onSuccess(res.data, requestCode);
     } else if (res.data.statusCode == 300000001) { // 未登錄
      that.isLogin = false;
      onErrorBefore(0, res.data.message, requestCode);
     } else {
      onErrorBefore(0, res.data.message == null ? "請求失敗 , 請重試" : res.data.message, requestCode);
     }
    } else {
     onErrorBefore(0, "請求失敗 , 請重試", requestCode);
    }
   },
   fail: function (res) {
    retry--;
    console.log("網絡訪問失敗:" + JSON.stringify(res));
    if (retry > 0) return that.webCall(urlPath, params, requestCode, onSuccess, onErrorBefore, onComplete, requestType, retry);
   },
   complete: function (res) {
    onComplete(requestCode);
    //請求完成后,2秒后重復驗證的開關關閉
    if (isVerify) {
     setTimeout(function () {
      that.verifyCount[urlPath] = false;
     }, 2000);
    }
   }
  })
 }

上面的verifyCount是放在data中的數組,apiHost 是放在js最外層的接口服務器地址,方便隨時開發、測試環境。

這個方法也是必不可少的

 complete: function (res) {
    onComplete(requestCode);
    //請求完成后,2秒后重復驗證的開關關閉
    if (isVerify) {
     setTimeout(function () {
      that.verifyCount[urlPath] = false;
     }, 2000);
    }
   }
  })

調用示范

請求:

 // 請求 home banner 數據
  wx.showNavigationBarLoading();
  app.webCall("/app/homeBanner", {}, QUERY_BANNER, this.onSuccess, this.onErrorBefore, this.onComplete);

請求成功的回調處理:

 /**
  * 接口訪問成功返回
  * @param {Object} data
  * @param {Object} requestCode
  */
 onSuccess: function (data, requestCode) {
   var that = this;
  switch (requestCode) {
   case QUERY_BANNER:
    that.setData({ bannerData: (data ? data.data : []) });
    break;
  }

QUERY_BANNER是放在js最外層的常量,用于接口訪問完成后的回調方法來區分請求的接口是哪個。

請求完成的處理:

/**
  * 接口訪問完成
  * @param {Object} resultCode
  */
 onComplete: function (resultCode) {
  console.log("home onComplete1");

  if (--mCurrentRequestNums <= 0) {
   wx.hideNavigationBarLoading();
  }
 }

mCurrentRequestNums 是放在js最外層的變量,表示發起請求的數量,用于多個接口同時被調用,并希望在全部請求結束后關閉標題欄加載動畫時用。

關于怎么在微信小程序中對網絡請求接口進行封裝就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大兴区| 华阴市| 新乐市| 光山县| 仲巴县| 清涧县| 娱乐| 河北区| 班戈县| 金沙县| 新密市| 高淳县| 亚东县| 鄄城县| 城市| 南川市| 新巴尔虎右旗| 鞍山市| 兴安县| 辽源市| 离岛区| 阳信县| 安阳县| 乌鲁木齐县| 安乡县| 夏邑县| 谷城县| 简阳市| 镇康县| 繁峙县| 黄大仙区| 张家口市| 电白县| 稻城县| 潼南县| 廉江市| 涿鹿县| 怀来县| 敖汉旗| 吴江市| 四平市|