首頁  >  文章  >  微信小程式  >  微信小程式 開發中遇到問題總結

微信小程式 開發中遇到問題總結

高洛峰
高洛峰原創
2017-02-18 11:55:131776瀏覽

微信小程式開發中遇到問題總結

1.由於小程式wx.request()方法是異步的,在app.js執行ajax後,各分頁載入app.js的全域資料時,無法按順序加載。例:

//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非同步函數:

//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跳轉時無法帶參數,解決方法:

//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()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用postx.request()使用post方法請求時,也需要加上header,header[content-type]值為application/x-www-form-urlencoded。範例:

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標籤(等),可以使用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頭。

解決方案:

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)正常,發佈時多行省略無效。

解決方案:如果不想重新審核,讓後台截斷就好

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

更多微信小程式 開發中遇到問題總結相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn