微信小程序 開發中遇到問題總結
1.由于小程序wx.request()方法是異步的,在app.js執行ajax后,各分頁加載app.js的全局數據時,無法按順序加載。例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//app.js App({ ajax: function (){ let that = this ; wx.request({ url: 'https://a.com/url.php' , method: 'GET' , success: function (e){ that.data = 123; } }) }; }) //content.js let app = getApp() Page({ getData: function (){; app.ajax(); console.log(app.data); //undefined } }) |
解決方法,使用Promise異步函數:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
//app.js App({ ajax: function (){ let that = this ; let promise = new Promise( function (resolve, reject){ wx.request({ url: 'https://a.com/url.php' , method: 'GET' , success: function (e){ that.data = 123; resolve(); } }) }); }; }) //content.js let app = getApp() Page({ getData: function (){; app.ajax().then(()=>{ console.log(app.data); //123 }); } }) |
2.圖片只能獲取原始寬高,無法獲取現有寬高。不過image標簽封裝了mode屬性,可以根據需求自行設置。
3.每個image標簽底部有一條透明間隔,非padding,非margin。在圖片前面做遮罩層時可能會被坑。
4.網絡請求必須部署https
5.配置tabBar時,list參數中的pagePath參數至少需要包含app.json里pages數組中的第一個路徑,否則會導致tabBar不顯示。
6.tabBar跳轉時無法帶參數,解決方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//search.js var app = getApp(); Page({ confirm: function (e){ //獲取數據,添加到全局 let val = e.detail.value; app.searchWord = val; this .jump(); }, jump: function (){ //跳轉tabBar wx.switchTab({ url: '../index/index' , }); }, }); //index.js var app = getApp(); Page({ onShow: function (e){ //獲取全局數據 let val = app.searchWord; } }); //需要傳遞參數的頁面在跳轉前將數據添加到app.js里。需要接受參數的頁面在onShow方法接受之前添加到app.js的數據。 |
7.小程序wx.request()方法請求的url必須是https開頭
8.wx.request()使用post方法請求時,還需要加上header,header[content-type]值為application/x-www-form-urlencoded。例:
1
2
3
4
5
6
7
8
9
10
11
|
wx.request({ url: 'https://a.com/url.php' , data: {message: 123}, method: 'POST' , header: { 'content-type' : 'application/x-www-form-urlencoded' }, success: function (e){ console.log(e) } }); |
9.小程序無法加載html標簽,同時數據渲染也無法渲染wxml標簽(<view></view>等),可以使用wxParse.js來處理相關數據。
10.安卓無法渲染wx.request()請求的數據。
檢測返回的數據是否有BOM頭(3個字符的空白)。安卓的wx.request解析不會跳過BOM頭,導致數據返回的是字符串,而不是對象或者數組。
例:
返回的數據是:(3個字符的空白){a:1, b:2}
解析的數據是:'{a:1, b:2}'(字符串),而不是{a:1, b:2}(對象)
由于不是對象,模板渲染之類會無法正常進行。解決方法,后臺返回數據前去掉BOM頭就行。如果后臺不會去BOM頭,可以在前端去除,但是wx.request如果dataType缺省,會默認為json并自動解析,導致無法去除BOM頭。
解決方案:
1
2
3
4
5
6
7
8
9
|
wx.request({ url: url, method: 'GET' , dataType: 'txt' , success: function (e){ let json = e.data.trim(); let arr = JSON.parse(json); } }); |
dataType改為json以外的格式,避免小程序自動解析json字符串,然后對返回的數據用 trim() 方法去掉空白,最后解析json字符串就行。
11.調試時多行省略(-webkit-line-clamp)正常,發布時多行省略無效。
解決方案:如果不想重新審核,讓后臺截斷就好
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://www.cnblogs.com/NKnife/p/6283605.html