? ? ? ? 最近開發(fā)微信小程序,遇到到過種坑不狮,例如什么前端發(fā)送請求色冀,后端請求成功,沒有獲取到前端傳遞的值挪略;后端請求成功历帚,并且值滔岳,前端就是出不來數(shù)據(jù);請求接口出現(xiàn)Provision headers are shown的現(xiàn)象挽牢;到最后蘋果手機上出現(xiàn)數(shù)據(jù)谱煤,安卓手機出現(xiàn)不了數(shù)據(jù)等等,非常多的bug禽拔。備注后端我用的php開發(fā)的刘离,框架用的TP5.0,我一度懷疑是我框架的原因睹栖。安卓需要的是字符串硫惕,蘋果好像都行吧,我是做的兼容處理磨淌。
作為一名程序員疲憋,連bug都沒有,你還開發(fā)什么軟件梁只?廢話不說了先上問題吧缚柳;
1.小程序前端發(fā)送請求給后端,常用的有2中方式搪锣,一種是get請求秋忙,一種是POST請求,首先舉例get請求吧构舟,wx.request({
? ? ? ? ? ? url: that.globalData.baseUrl + 'user/add',//請求后臺接口
? ? ? ? ? ? data: {
? ? ? ? ? ? ? code: avatarUrl,
? ? ? ? ? ? ? username: nickName }
? ? ? ? ? ? header: {
? ? ? ? ? ? ?'content-type':'application/json',// 默認(rèn)值
? ? ? ? ? ? ? ? token: wx.getStorageSync('token')
? ? ? ? ? ? ? },
? ? ? ? ? ? method: "get",
? ? ? ? ? ? success: function (res) {
? ? ? ? ? ? ? // console.log(res)
? ? ? ? ? ? }
? ? ? ? ? })? 這種傳遞方式是沒有什么問題灰追,后端怎么都會接受到數(shù)據(jù),前端也可以接受到數(shù)據(jù)狗超。
主要是看第二種post方法弹澎;
wx.request({
? ? ? ? ? ? url: that.globalData.baseUrl + 'wx/getToken',//請求后臺接口
? ? ? ? ? ? data: {
? ? ? ? ? ? ? code: res.code
? ? ? ? ? ? },
? ? ? ? ? ? header: {
? ? ? ? ? ? ? "Content-Type": "application/x-www-form-urlencoded",
? ? ? ? ? ? },
? ? ? ? ? ? method: "POST",
? ? ? ? ? ? success: function (res) {
? ? ? ? ? ? ? console.log(res);
? ? ? ? ? ? ? wx.setStorageSync('token', res.data.data)
? ? ? ? ? ? }
? ? ? ? ? })
這種情況是后端是可以接受到數(shù)據(jù)的,努咐,但是把? "Content-Type": "application/x-www-form-urlencoded",換成?'content-type':'application/json'苦蒿,后端接口就接收不到數(shù)據(jù),但是有的小程序上面post請求中header頭換成'content-type':'application/json'渗稍,也能接受到數(shù)據(jù)佩迟。但是我后端就是不能,后來我就換成了這個竿屹。
2.后端請求成功报强,并且值,前端就是出不來數(shù)據(jù)拱燃?
?主要是請求的類型和你返回給前端的數(shù)據(jù)類型不對一致秉溉。這是你就需要及時檢測數(shù)據(jù)類型,并且換成對應(yīng)的數(shù)據(jù)類型。
3.請求接口出現(xiàn)Provision headers are shown的現(xiàn)象
出現(xiàn)上述現(xiàn)象主要是應(yīng)為阻塞的原因坚嗜,主要需要下面幾個方面夯膀,首先是否用了斷點诗充,斷點沒注意苍蔬,就會出現(xiàn);數(shù)據(jù)庫方面的請求連接是否過長蝴蜓,否則也會出現(xiàn)碟绑。小程序要求速度快,所以一般都用原生數(shù)據(jù)庫接口更好點茎匠,響應(yīng)速度短格仲,界面反應(yīng)也快。
4.到最后蘋果手機上出現(xiàn)數(shù)據(jù)诵冒,安卓手機出現(xiàn)不了數(shù)據(jù)
例如后端返回數(shù)據(jù)出現(xiàn)是這種 "{"code":1,"data":"4f756fd91b8a81f1","msg":"請求成功"}" 凯肋,那么需要對應(yīng)處理:首先判斷是那種數(shù)據(jù)類型
var json =res.data
if (typeof json != 'object') {
? if (json != null) {
json = json.replace("\ufeff", "")
var ob = JSON.parse(json)
? ?} },轉(zhuǎn)字符串還是json對象汽馋,一般都是轉(zhuǎn)json對象侮东,傳值得時候轉(zhuǎn)json字符串比較多。有時候返回的值可能會出現(xiàn)前面有個隱藏的點豹芯,JSON.parse處理返回什么“token 有個0”悄雅,那么需要用下面的處理一下數(shù)據(jù)var aa = res.data.trim();var bb = JSON.parse(aa);謝謝大家铁蹈,第一次寫宽闲。以前都是印象筆記上寫;現(xiàn)在簡書上寫握牧。請多多指教
? ? ? ? ? ? ? ? ? ? ?高爾基:學(xué)習(xí)并不等于就是摹仿某些東西容诬,而是掌握技巧和方法。