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

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

官方接口

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

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是無效的,只能發異步請求,因此若是想寫一個函數來返回調用接口獲得的數據就比較難實現。
相關文章
相關標籤/搜索