知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?
您當(dāng)前位置>首頁 » 新聞資訊 » 小程序相關(guān) >
微信小程序項(xiàng)目遇見問題三:有時候undefined不一定就是undefined | 解決微信小程序每
發(fā)表時間:2020-10-6
發(fā)布人:葵宇科技
瀏覽次數(shù):391
文章目錄
- 一、有時候undefined不一定就是undefined
- 二、解決微信小程序每次request請求,Cookie不一樣
- 三、request 獲取不到返回值
一、有時候undefined不一定就是undefined
今天,菜鳥在進(jìn)行微信小程序頁面跳轉(zhuǎn)時,進(jìn)行了傳遞參數(shù),而頁面?zhèn)鬟f參數(shù)的時候,像數(shù)字、字符串之類的可以直接傳遞,對象和數(shù)組需要用JSON.stringify()轉(zhuǎn)成字符串再進(jìn)行傳遞。然后在跳轉(zhuǎn)頁面的onLoad函數(shù)中用JSON.parse()轉(zhuǎn)成原型再使用。
但是當(dāng)后臺返回為 空 或者 undefined 的時候,這時候傳遞過去的就是undefined
這個時候 JSON.parse() 就會報(bào)錯:
這個時候一般都是會先判斷一下,是否為undefined然后確定是否 JSON.parse() ,這里就到了很坑的時候了,如果你直接這樣寫:
onLoad: function (options) {
console.log(options.informList); //undefined
if(options.informList !== undefined ){
console.log(222);
var test = JSON.parse(options.informList);
console.log(test);
this.setData({
testlist: test,
num:test.length
})
console.log(this.data.num);
}else{
console.log(111);
this.setData({
num:0
})
}
},
這樣運(yùn)行的結(jié)果會非常的匪夷所思,這時候打印一下 options.informList 的類型就恍然大悟了,原來傳遞過來的時候被轉(zhuǎn)換為String類型了,所以這里的undefined就不是undefined了!
解決辦法:
onLoad: function (options) {
console.log(options.informList);
console.log(typeof(options.informList));
if(options.informList !== "undefined" ){
console.log(222)
var test = JSON.parse(options.informList);
console.log(test);
this.setData({
testlist: test,
num:test.length
})
console.log(this.data.num);
}else{
this.setData({
num:0
})
}
},
二、解決微信小程序每次request請求,Cookie不一樣
這次做微信小程序,發(fā)現(xiàn)和后臺建立連接,每次都會新建一個連接,這樣就無法在同一個連接上進(jìn)行操作,那么后臺中的數(shù)據(jù),后臺就無法通過緩存進(jìn)行傳輸,所以必須得解決這個問題。
解決辦法:
//保存cookies,解決request每次請求連接不一樣的bug
const phpsessidarr = result.cookies[0].split(";"); //這里result是后臺第一返回的,可以從中獲取到cookies
const phpsessid = phpsessidarr[0];
const header = {'content-type': 'application/json', 'Cookie': phpsessid};
wx.request({
url: common_urlapi+url,
data:{},
header: header,
method:"POST",
success:res=>{},
fail:err=>{}
)}
其它更多參數(shù)設(shè)置:
Header:請求頭參數(shù)詳解
三、request 獲取不到返回值
有時候直接調(diào)用 request ,然后直接令變量等于 success 里面的返回值,但是發(fā)現(xiàn)根本獲取不到
function request_urlapi_fun(url,token,date,obj){
const app = getApp();
const common_urlapi = app.globalData.urlapi;
const cookies=wx.getStorageSync('cookies');
const objString = JSON.stringify(obj);
const phpsessidarr = cookies.split(";");
const phpsessid = phpsessidarr[0];
console.log(phpsessid);
const header = {'content-type': 'application/json', 'Cookie': wx.getStorageSync('phpsessid')};
const token2 = md5.md5(token+objString);
wx.request({
url: common_urlapi+url,
data:{
token:token2,
time:parseInt(date),
ac_id:obj.ac_id,
},
header: header,
method:"POST",
success:res=> {
console.log(res);
console.log(res.data);
return res
},
fail:err=>{
console.log(err);
wx.showModal({
title: '提示',
content: '服務(wù)器錯誤',
});
}
})
}
結(jié)果發(fā)現(xiàn)外面根本無法獲取到
let a = request_urlapi_fun.request_urlapi_fun("Academy/notice",token,date,obj);
console.log(a);
運(yùn)行結(jié)果:
大家會發(fā)現(xiàn),代碼是先打印a,再執(zhí)行的 request_urlapi_fun ,所以導(dǎo)致根本無法獲取值,菜鳥感覺是request是異步請求的原因!
解決辦法也很簡單,就是將異步變?yōu)橥骄秃昧?/p>
function request_urlapi_fun(url,token,date,obj){
const app = getApp();
const common_urlapi = app.globalData.urlapi;
const cookies=wx.getStorageSync('cookies');
const objString = JSON.stringify(obj);
const phpsessidarr = cookies.split(";");
const phpsessid = phpsessidarr[0];
console.log(phpsessid);
const header = {'content-type': 'application/json', 'Cookie': wx.getStorageSync('phpsessid')};
const token2 = md5.md5(token+objString);
return new Promise((resolve ,reject)=>{
wx.request({
url: common_urlapi+url,
data:{
token:token2,
time:parseInt(date),
ac_id:obj.ac_id,
},
header: header,
method:"POST",
success:res=> {
console.log(res);
console.log(res.data);
console.log(token);
wx.setStorageSync('pbw_token', res.data.datas.token);
delete res.data.datas.token;
console.log(wx.getStorageSync('pbw_token'));
let mdtoken = md5.md5(token+JSON.stringify(res.data.datas));
console.log(mdtoken);
if(mdtoken === wx.getStorageSync('pbw_token')){
resolve(res);
}else{
wx.showModal({
title: '提示',
content: '數(shù)據(jù)被篡改',
});
}
},
fail:err=>{
reject(err);
console.log(err);
wx.showModal({
title: '提示',
content: '服務(wù)器錯誤',
});
}
})
})
}
然后返回的的值是promise類型,所以要調(diào)用其結(jié)果,應(yīng)該這樣:
a.then(res=>{
console.log(res);
this.setData({
'informList[0].num':res.data.datas.schoolinform.length,
'informList[1].num':res.data.datas.academyinform.length,
schoolinform:res.data.datas.schoolinform,
academyinform:res.data.datas.academyinform,
})
}).catch(err=>{
console.log(err);
})
相關(guān)案例查看更多
相關(guān)閱讀
- 云南做網(wǎng)站
- 微信分銷系統(tǒng)
- 小程序的開發(fā)公司
- 網(wǎng)站建設(shè)招商
- 昆明網(wǎng)站制作
- 二叉樹
- 生成海報(bào)
- 微信小程序
- 汽車拆解管理軟件
- 汽車回收系統(tǒng)
- 商標(biāo)注冊
- 網(wǎng)站建設(shè)電話
- 企業(yè)網(wǎng)站
- 小程序被騙退款成功
- 江蘇小程序開發(fā)
- 小程序用戶登錄
- 云南網(wǎng)站建設(shè)招商
- 表單
- 前端
- 網(wǎng)站建設(shè)制作
- 網(wǎng)站建設(shè)服務(wù)
- 云南網(wǎng)站建設(shè)特性
- 百度推廣
- 網(wǎng)站建設(shè)哪家強(qiáng)
- 云南省建設(shè)廳網(wǎng)站
- 小程序開發(fā)
- 昆明網(wǎng)站建設(shè)公司
- 網(wǎng)站建設(shè)報(bào)價
- 昆明小程序開發(fā)聯(lián)系方式
- 云南網(wǎng)站優(yōu)化公司