調用wx.request接口時需要注意的幾個問題


寫在前面

之前寫了一篇《微信小程序實現各種特效實例》,上次的小程序的項目我負責大部分前端后台接口的對接,然后學長幫我改了一些問題。總的來說,收獲了不少吧!

現在項目已經完成,還是要陸陸續續總結一下的,總結的過程也是對知識梳理和清晰的過程!

這次主要聊一下小程序前后端接口對接的一些事,

 

對於客戶端與服務端接口的對接,微信小程序提供了wx.request()的API接口,完美的實現前端后台的對接

一個簡單的子:

 wx.request({
     url: API_URL + '/api/category/categoryList', data: { applet_id: app.globalData.applet_id }, method: 'POST', success: function (res) { wx.hideLoading(); console.log(res.data.data, 'category data acquisition success');
            that.setData({category: res.data.data});
       }
  });

 在控制台中也得到了我想要的接口中的數據:

 

但期間也遇到了幾個問題,總結下來;

1)網絡請求與域名的合法性

微信小程序包括四種類型的網絡請求:

  • 普通HTTPS請求(wx.request)

  • 上傳文件(wx.uploadFile)

  • 下載文件(wx.downloadFile)

  • WebSocket通信(wx.connectSocket)

關於“URL 域名不合法,請在后台配置后重試”的錯誤

小程序只允許與合法配置的域名進行數據交互

進入微信公共平台=>設置=>開發設置:設置需要交互的域名

2)對於接口調用http和https的問題

對於這一個問題,在之前來說,微信公共平台支持使用http測試項目,但是正式發布需要使用https的域名,

但是前幾天看到了微信公眾平台發的一則公告:

應該是要封殺http方式調用了,公告鏈接:為保證數據傳輸安全,提高業務安全性,公眾平台將不再支持HTTP方式調用(時間2017年9月21日)

3)關於method以及data數據

微信小程序多地方都嚴格區分大小寫,所以要注意method的value需要為大寫,request的默認的超時時間都是60s;

對於data數據,上次我們從接口中拿到的數據是json格式的,最終發送給服務器的數據是String類型,如果傳入的 data 不是 String 類型,會被轉換成 String 。

文檔中提供的轉換規則如下:

  • 對於 header['content-type'] 為 application/json 的數據,會對數據進行 JSON 序列化

  • 對於 header['content-type'] 為 application/x-www-form-urlencoded 的數據,會將數據轉換成 query string;

(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)

這個工作在我們設置header頭為application/x-www-form-urlencoded后,在后面為我們進行。

4)關於GET和POST請求

根據HTTP的規范,get是用於信息獲取,post表示可能修改服務器的資源的請求

對於小程序post請求:'application/json'用在get請求中沒有問題,但是用POST請求中不好使了,content-type 默認為 'application/json'; 

所以使用post請求時,將content-type設置為 application/x-www-form-urlencoded 

寫在后面

總結了以上四個問題,應該是比較常見也是容易遇到的,歡迎補充和指正,另外文檔中api模塊還有一些需要注意的問題,

項目我們在github已同步:StackOverflowChen;歡迎來訪喲;

 

參考資料

[1] https://mp.weixin.qq.com/debug/wxadoc/dev/api/

[2] http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

 


免責聲明!

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



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