微信小程序之----接口調用方式


最近開發了一個微信小程序版的任務管理系統,在向Java后台發送接口時遇到了一些問題,在這里做一個簡單的總結。

官方接口

官方給出的接口叫做wx.request,請求方式比較簡單,下面是官網給出的請求實例。

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

存在的問題

  • wx.request請求的header中content-type默認為application/json,如果我們想換種方式比如用"application/x-www-form-urlencoded"會發現在請求頭信息中並沒有取代默認的application/json而是新增了這種方式,另外在用jquery.ajax請求時即便同樣使用application/json方式來請求,得到的數據格式也不相同,無論用什么請求方式ajax都會將請求數據轉換為&name1=value1&name2=value2的形式,這樣在根據content-type來解析請求數據時就會出現問題,不知道微信是有意這樣做還是它根本就是個bug。總之是給我帶來了不必要的麻煩。
  • 微信小程序發送的是https請求,在本地調試時可以用http,如果放在手機上測試時校驗請求方式和域名,不合法會報以下錯誤:

  • 為了方便請求,可以對wx.request做一個簡單的封裝,這樣我們再調用的時候就方便了許多,代碼如下:
var app = getApp();
function request(url,postData,doSuccess,doFail,doComplete){
      var host = getApp().conf.host;
      wx.request({
        url: host+url,
        data:postData,
        method: 'POST', 
        success: function(res){
          if(typeof doSuccess == "function"){
              doSuccess(res);
          }
        },
        fail: function() {
          if(typeof doFail == "function"){
              doFail();
          }
        },
        complete: function() {
          if(typeof doComplete == "function"){
              doComplete();
          }
        }
      });
  }
}

module.exports.request = request;
  • 如果一個接口在不同地方頻繁用到,原本設想寫一個函數,然后將函數暴露供其他js調用,但后來發現wx.request中設置async是無效的,只能發異步請求,所以如果想寫一個函數來返回調用接口得到的數據就比較難實現。

來源:https://www.cnblogs.com/liululin/p/6082568.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM