欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序網(wǎng)絡請求封裝示例

 更新時間:2018年07月24日 11:33:54   作者:Meils  
這篇文章主要介紹了微信小程序網(wǎng)絡請求封裝示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

網(wǎng)絡請求

網(wǎng)絡請求小程序提供了wx.request, 仔細看一下 api,這不就是n年前的 $.ajax 嗎,好古老啊。

// 官方例子
wx.request({
 url: 'test.php', //僅為示例,并非真實的接口地址
 data: {
   x: '' ,
   y: ''
 },
 header: {
   'content-type': 'application/json' // 默認值
 },
 success: function(res) {
  console.log(res.data)
 }
})

小程序支持ES6,那么就應該支持Promise 了,很開心~, 話不多說直接上代碼吧

Promise封裝

const baseUrl = 'https://api.it120.cc';

const http = ({ url = '', param = {}, ...other } = {}) => {
  wx.showLoading({
    title: '請求中,請耐心等待..'
  });
  let timeStart = Date.now();
  return new Promise((resolve, reject) => {
    wx.request({
      url: getUrl(url),
      data: param,
      header: {
        'content-type': 'application/json' // 默認值 ,另一種是 "content-type": "application/x-www-form-urlencoded"
      },
      ...other,
      complete: (res) => {
        wx.hideLoading();
        console.log(`耗時${Date.now() - timeStart}`);
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data)
        } else {
          reject(res)
        }
      }
    })
  })
}

const getUrl = (url) => {
  if (url.indexOf('://') == -1) {
    url = baseUrl + url;
  }
  return url
}

// get方法
const _get = (url, param = {}) => {
  return http({
    url,
    param
  })
}

const _post = (url, param = {}) => {
  return http({
    url,
    param,
    method: 'post'
  })
}

const _put = (url, param = {}) => {
  return http({
    url,
    param,
    method: 'put'
  })
}

const _delete = (url, param = {}) => {
  return http({
    url,
    param,
    method: 'put'
  })
}
module.exports = {
  baseUrl,
  _get,
  _post,
  _put,
  _delete
}

使用

const api = require('../../utils/api.js')

// 單個請求
api.get('list').then(res => {
 console.log(res)
}).catch(e => {
 console.log(e)
})

// 一個頁面多個請求
Promise.all([
 api.get('list'),
 api.get(`detail/${id}`)
]).then(result => {
 console.log(result)
}).catch(e => {
 console.log(e)
})

登陸問題

做一個應用,肯定避免不了登錄操作。用戶的個人信息啊,相關的收藏列表等功能都需要用戶登錄之后才能操作。一般我們使用token做標識。

小程序并沒有登錄界面,使用的是 wx.login 。 wx.login 會獲取到一個 code,拿著該 code 去請求我們的后臺會最后返回一個token到小程序這邊,保存這個值為 token 每次請求的時候帶上這個值。
一般還需要把用戶的信息帶上比如用戶微信昵稱,微信頭像等,這時候就需要使用 wx.getUserInfo ,這里涉及到一個用戶授權(quán)的問題

帶上用戶信息就夠了嘛? too young too simple!我們的項目不可能只有小程序,相應的微信公眾平臺可能還有相應的App,我們需要把賬號系統(tǒng)打通,讓用戶在我們的項目中的賬戶是同一個。這就需要用到微信開放平臺提供的 UnionID 。

登陸

//app.js
App({
 onLaunch: function () {
  console.log('App onLaunch');
  var that = this;
  // 獲取商城名稱
  wx.request({
   url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/config/get-value',
   data: {
    key: 'mallName'
   },
   success: function(res) {
    wx.setStorageSync('mallName', res.data.data.value);
   }
  })
  this.login();
  this.getUserInfo();
 },
 login : function () {
  var that = this;
  var token = that.globalData.token;
  // 如果有token
  if (token) {
   // 檢查token是否有效
   wx.request({
    url: 'https://api.it120.cc/' + that.globalData.subDomain + '/user/check-token',
    data: {
     token: token
    },
    success: function (res) {
     // 如果token失效了
     if (res.data.code != 0) {
      that.globalData.token = null;
      that.login(); // 重新登陸
     }
    }
   })
   return;
  }

  // 【1】調(diào)用微信自帶登陸
  wx.login({
   success: function (res) {
    // 【2】 拿到code去訪問我們的后臺換取其他信息
    wx.request({
     url: 'https://api.it120.cc/'+ that.globalData.subDomain +'/user/wxapp/login',
     data: {
      code: res.code
     },
     success: function(res) {
      // 如果說這個code失效的
      if (res.data.code == 10000) {
       // 去注冊
       that.registerUser();
       return;
      }
      // 如果返回失敗了
      if (res.data.code != 0) {
       // 登錄錯誤 
       wx.hideLoading();
       // 提示無法登陸
       wx.showModal({
        title: '提示',
        content: '無法登錄,請重試',
        showCancel:false
       })
       return;
      }
      
      // 【3】 如果成功后設置token到本地
      that.globalData.token = res.data.data.token;
      // 保存用戶信息
      wx.setStorage({
       key: 'token',
       data: res.data.data.token
      })
     }
    })
   }
  })
 },
 // 注冊?? [這個看需求]
 registerUser: function () {
  var that = this;
  wx.login({
   success: function (res) {
    var code = res.code; // 微信登錄接口返回的 code 參數(shù),下面注冊接口需要用到
    wx.getUserInfo({
     success: function (res) {
      var iv = res.iv;
      var encryptedData = res.encryptedData;
      // 下面開始調(diào)用注冊接口
      wx.request({
       url: 'https://api.it120.cc/' + that.globalData.subDomain +'/user/wxapp/register/complex',
       data: {code:code,encryptedData:encryptedData,iv:iv}, // 設置請求的 參數(shù)
       success: (res) =>{
        wx.hideLoading();
        that.login();
       }
      })
     }
    })
   }
  })
 },
 // 獲取用戶信息
 getUserInfo:function() {
  wx.getUserInfo({
   success:(data) =>{
    this.globalData.userInfo = data.userInfo;
    wx.setStorage({
     key: 'userInfo',
     data: data.userInfo
    })
    return this.globalData.userInfo;
   }
  })
 },
 globalData:{
  userInfo:null,
  subDomain:"34vu54u7vuiuvc546d",
  token: null
 }
})

授權(quán)問題

 getUserInfo: function () {
  // 先調(diào)用wx.getSetting 獲取用戶權(quán)限設置
  wx.getSetting({
   success(res) {
    console.log('1');
    if (!res.authSetting['scope.userInfo']) {
     wx.authorize({
      scope: 'scope.userInfo',
      success() {
       // 用戶已經(jīng)同意小程序使用錄音功能,后續(xù)調(diào)用 wx.getUserInfo接口不會彈窗詢問
       wx.getUserInfo({
        success: (data) => {
         this.globalData.userInfo = data.userInfo;
         wx.setStorage({
          key: 'userInfo',
          data: data.userInfo
         })
         return this.globalData.userInfo;
        }
       })
      }
     })
    } else {
     console.log(2);
    }
   }
  })

 },

小結(jié)

網(wǎng)絡請求這塊,算目前開發(fā)項目中必不可少的一塊加油~~

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JavaScript實現(xiàn)圖片自動加載的瀑布流效果

    JavaScript實現(xiàn)圖片自動加載的瀑布流效果

    這篇文章主要介紹了JavaScript實現(xiàn)圖片自動加載的瀑布流效果的相關資料,需要的朋友可以參考下
    2016-04-04
  • layuimini框架實現(xiàn)點擊菜單欄回到起始頁的解決方案

    layuimini框架實現(xiàn)點擊菜單欄回到起始頁的解決方案

    這篇文章主要介紹了layuimini框架實現(xiàn)點擊菜單欄回到起始頁的解決方案,本文通過圖文示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 微信小程序如何同時獲取用戶信息和用戶手機號

    微信小程序如何同時獲取用戶信息和用戶手機號

    小程序登錄是現(xiàn)在小程序里面很普遍的一個功能,因為官方提供的方法,可以一鍵獲取到用戶信息,一鍵拿到手機號,這篇文章主要給大家介紹了關于微信小程序如何同時獲取用戶信息和用戶手機號的相關資料,需要的朋友可以參考下
    2021-08-08
  • JavaScript使用concat連接數(shù)組的方法

    JavaScript使用concat連接數(shù)組的方法

    這篇文章主要介紹了JavaScript使用concat連接數(shù)組的方法,實例分析了javascript中concat函數(shù)操作數(shù)組的技巧,需要的朋友可以參考下
    2015-04-04
  • 利用Javascript判斷操作系統(tǒng)的類型實現(xiàn)不同操作系統(tǒng)下的兼容性

    利用Javascript判斷操作系統(tǒng)的類型實現(xiàn)不同操作系統(tǒng)下的兼容性

    在通過Javascript實現(xiàn)客戶端和服務端的交互時,有時候需要對操作系統(tǒng)進行判斷,以便實現(xiàn)不同操作系統(tǒng)下的兼容性;從而實現(xiàn)網(wǎng)站在跨平臺瀏覽時候保持良好的用戶體驗,感興趣的朋友可以了解下啊,或許對你有所幫助
    2013-01-01
  • JS中fetch()用法實例詳解

    JS中fetch()用法實例詳解

    在JS中使用fetch更加高效地進行網(wǎng)絡請求,下面這篇文章主要給大家介紹了關于JS中fetch()用法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • 犀利的js 函數(shù)集合

    犀利的js 函數(shù)集合

    和同事討論js時,我說較為理想的狀態(tài)是,把js當一把好用的匕首,隨手拿來,捅一刀子就走。話雖如此,但現(xiàn)實生活中大部分時候的情況是不理想的。
    2009-06-06
  • js+css實現(xiàn)導航效果實例

    js+css實現(xiàn)導航效果實例

    這篇文章主要介紹了js+css實現(xiàn)導航效果,實例分析了下拉菜單導航的js實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • 奉獻給JavaScript初學者的編寫開發(fā)的七個細節(jié)

    奉獻給JavaScript初學者的編寫開發(fā)的七個細節(jié)

    每種語言都有它特別的地方,對于JavaScript來說,使用var就可以聲明任意類型的變量,這門腳本語言看起來很簡單,然而想要寫出優(yōu)雅的代碼卻是需要不斷積累經(jīng)驗的。本文利列舉了JavaScript初學者應該注意的七個細節(jié),與大家分享。
    2011-01-01
  • js子頁面獲取父頁面數(shù)據(jù)示例

    js子頁面獲取父頁面數(shù)據(jù)示例

    這篇文章主要介紹了js子頁面如何獲取父頁面數(shù)據(jù),需要的朋友可以參考下
    2014-05-05

最新評論