1、接口請求安卓端回調(diào) success,IOS 端回調(diào) fail
原因:dataType
設(shè)置不對,默認(rèn)是 json
格式,對返回?cái)?shù)據(jù)會進(jìn)行 json
解析,如果解析失敗,就會回調(diào) fail
。加密傳輸一般是 text
格式。
2、input 禁止輸入空格
input
、textarea
組件默認(rèn)不會雙向綁定,需要借助 setData
進(jìn)行中轉(zhuǎn)。
<textarea value="{{valueTextarea}}" onInput="handleTextarea" ></textarea>
<input value="{{valueInput}}" onInput="handleInput" />
Page({
data: {
valueTextarea: '',
valueInput: ''
},
// textarea
handleTextarea: function(e) {
this.setData({
valueTextarea: e.detail.value,
});
},
// input
handleInput: function(e) {
this.setData({
valueInput: e.detail.value,
});
},
});
如果僅是這樣,只能實(shí)現(xiàn)雙向綁定,無法達(dá)到禁止輸入空格的預(yù)期,所以需要對數(shù)據(jù)進(jìn)行處理。
this.setData({
value: e.detail.value.replace(/\s+/g, ''),
});
輸入時對輸入的值進(jìn)行替換,將空格過濾掉??上н@樣也只能實(shí)現(xiàn)一半,與預(yù)期還是有出入,因?yàn)殡m然 data
中的值沒有空格了,但是頁面展示中依然會有空格。神奇的是,打印出來的結(jié)果也是沒有空格的。所以還需要更進(jìn)一步處理,其實(shí)這一點(diǎn)官方文檔中是有提到的,只需將下面的屬性改為 true
即可。
3、點(diǎn)擊 tabBar 頁面不更新
需要注意頁面棧深度。正常使用 my.switchTab
跳轉(zhuǎn)時可以觸發(fā)頁面更新的。
但是如果點(diǎn)擊底部按鈕切換,不會觸發(fā)更新,不過官方提供了一個 API onTabItemTap
,這是小程序自帶的事件處理函數(shù),可以監(jiān)聽到 tabBar
被點(diǎn)擊事件。
官方文檔-頁面運(yùn)行機(jī)制
4、加密算法
官方提供了一個API my.rsa
,不過能力很弱,僅支持 RSA 加解密能力,如需更多加解密的能力,建議使用 crypto-js
。
使用方法如下:
# 安裝
npm install crypto-js
示例 AES 加密:
const CryptoJS = require("crypto-js")
/**
* @description 加密
* @param word 加密內(nèi)容
* @param key 密鑰
*/
export function encrypt(word, key) {
const keyStr = CryptoJS.enc.Utf8.parse(key);
const srcs = CryptoJS.enc.Utf8.parse(word);
const encrypted = CryptoJS.AES.encrypt(srcs, keyStr, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return encrypted.toString();
}
/**
* @description 解密
* @param word 解密內(nèi)容
* @param key 密鑰
*/
export function decrypt(word, key) {
const keyStr = CryptoJS.enc.Utf8.parse(key);
const base64 = CryptoJS.enc.Base64.parse(word);
const src = CryptoJS.enc.Base64.stringify(base64);
const decrypt = CryptoJS.AES.decrypt(src, keyStr, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
});
return decrypt.toString(CryptoJS.enc.Utf8);
}
官方文檔-my.rsa
5、網(wǎng)絡(luò)請求封裝
小程序因?yàn)橐米詭У腁PI my.request
,請求的格式需要按照要求去寫。
my.request({
url: 'https://httpbin.org/post',
method: 'POST',
data: {
from: '支付寶',
production: 'AlipayJSAPI',
},
headers: {
'content-type': 'application/json', //默認(rèn)值
},
dataType: 'json',
success: function (res) {
my.alert({ content: 'success' });
},
fail: function (error) {
console.error('fail: ', JSON.stringify(error));
},
complete: function (res) {
my.hideLoading();
my.alert({ content: 'complete' });
},
});
如果每次請求都要完整的寫一遍上面的內(nèi)容,那真的很令人絕望,尤其是需要改變服務(wù)器地址時,每次都全局替換,也絕對不是一個好的方式。
以下為請求封裝示例(僅供參考,實(shí)際場景要比示例復(fù)雜很多):
/**
* @description 接口封裝
* @param url 接口路徑
* @param params 接口數(shù)據(jù)
* @param method 請求類型 GET、POST...
* @param type content-type,默認(rèn)application/json
*/
export function request(url, params, method, type = 'application/json') {
return new Promise((resolve, reject) => {
my.request({
url: `https://****{url}`,
headers: {
'content-type': type
},
method: method,
dataType: 'text',
data: params,
success: (res) => resolve(res.data),
fail: (err) => resolve(err),
});
}
}
6、base64編解碼
小程序不是瀏覽器,btoa()
,atob()
這樣的寫法在低版本中未必支持,且即使不支持,小程序也不會提示,因此在遇到不支持的語法時,很難定位問題。
百度可以搜索到自己寫的 base64
編解碼函數(shù),不幸的是,與 btoa()
,atob()
對某些字符的編碼未必一致,所以未必可用。幸運(yùn)的是,小程序提供了 base64
編解碼的API,但也有其限制,僅支持 ArrayBuffer
與 base64
之間編解碼。
基礎(chǔ)庫 2.7.3 或更高版本支持
// 將 Base64 字符串轉(zhuǎn)成 ArrayBuffer 對象
my.base64ToArrayBuffer()
// 將 ArrayBuffer 對象轉(zhuǎn)成 Base64 字符串
my.arrayBufferToBase64()
遇到再更,如有不同看法或需要作者補(bǔ)充,歡迎在評論區(qū)留言,看到會及時補(bǔ)充。文章來源:http://www.zghlxwxcb.cn/news/detail-822630.html
WAIT…文章來源地址http://www.zghlxwxcb.cn/news/detail-822630.html
到了這里,關(guān)于支付寶小程序開發(fā)踩坑筆記(支付寶、學(xué)習(xí)強(qiáng)國小程序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!