知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序項(xiàng)目遇見(jiàn)問(wèn)題三:有時(shí)候undefined不一定就是undefined | 解決微信小程序每
發(fā)表時(shí)間:2020-10-6
發(fā)布人:葵宇科技
瀏覽次數(shù):396
文章目錄
- 一、有時(shí)候undefined不一定就是undefined
- 二、解決微信小程序每次request請(qǐng)求,Cookie不一樣
- 三、request 獲取不到返回值
一、有時(shí)候undefined不一定就是undefined
今天,菜鳥(niǎo)在進(jìn)行微信小程序頁(yè)面跳轉(zhuǎn)時(shí),進(jìn)行了傳遞參數(shù),而頁(yè)面?zhèn)鬟f參數(shù)的時(shí)候,像數(shù)字、字符串之類的可以直接傳遞,對(duì)象和數(shù)組需要用JSON.stringify()轉(zhuǎn)成字符串再進(jìn)行傳遞。然后在跳轉(zhuǎn)頁(yè)面的onLoad函數(shù)中用JSON.parse()轉(zhuǎn)成原型再使用。
但是當(dāng)后臺(tái)返回為 空 或者 undefined 的時(shí)候,這時(shí)候傳遞過(guò)去的就是undefined
這個(gè)時(shí)候 JSON.parse() 就會(huì)報(bào)錯(cuò):
這個(gè)時(shí)候一般都是會(huì)先判斷一下,是否為undefined然后確定是否 JSON.parse() ,這里就到了很坑的時(shí)候了,如果你直接這樣寫(xiě):
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é)果會(huì)非常的匪夷所思,這時(shí)候打印一下 options.informList 的類型就恍然大悟了,原來(lái)傳遞過(guò)來(lái)的時(shí)候被轉(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請(qǐng)求,Cookie不一樣
這次做微信小程序,發(fā)現(xiàn)和后臺(tái)建立連接,每次都會(huì)新建一個(gè)連接,這樣就無(wú)法在同一個(gè)連接上進(jìn)行操作,那么后臺(tái)中的數(shù)據(jù),后臺(tái)就無(wú)法通過(guò)緩存進(jìn)行傳輸,所以必須得解決這個(gè)問(wèn)題。
解決辦法:
//保存cookies,解決request每次請(qǐng)求連接不一樣的bug
const phpsessidarr = result.cookies[0].split(";"); //這里result是后臺(tái)第一返回的,可以從中獲取到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:請(qǐng)求頭參數(shù)詳解
三、request 獲取不到返回值
有時(shí)候直接調(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ù)器錯(cuò)誤',
});
}
})
}
結(jié)果發(fā)現(xiàn)外面根本無(wú)法獲取到
let a = request_urlapi_fun.request_urlapi_fun("Academy/notice",token,date,obj);
console.log(a);
運(yùn)行結(jié)果:
大家會(huì)發(fā)現(xiàn),代碼是先打印a,再執(zhí)行的 request_urlapi_fun ,所以導(dǎo)致根本無(wú)法獲取值,菜鳥(niǎo)感覺(jué)是request是異步請(qǐng)求的原因!
解決辦法也很簡(jiǎn)單,就是將異步變?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ù)器錯(cuò)誤',
});
}
})
})
}
然后返回的的值是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)閱讀
- 江蘇小程序開(kāi)發(fā)
- 云南網(wǎng)絡(luò)推廣
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 云南小程序哪家好
- 微信小程序開(kāi)發(fā)入門(mén)課程
- 網(wǎng)站開(kāi)發(fā)哪家好
- 云南網(wǎng)站制作哪家好
- 做網(wǎng)站
- 云南網(wǎng)站建設(shè)電話
- 云南網(wǎng)站建設(shè)首選公司
- 網(wǎng)站建設(shè)快速優(yōu)化
- 霸屏推廣
- 網(wǎng)站建設(shè)特性
- php網(wǎng)站
- 網(wǎng)站建設(shè)首選公司
- 小程序被騙
- 汽車拆解系統(tǒng)
- 汽車報(bào)廢回收管理軟件
- 生成海報(bào)
- 網(wǎng)站建設(shè)靠譜公司
- 重慶網(wǎng)站建設(shè)公司
- 百度小程序開(kāi)發(fā)
- 云南網(wǎng)站建設(shè)哪家公司好
- 表單
- 貴州小程序開(kāi)發(fā)
- 云南手機(jī)網(wǎng)站建設(shè)
- 網(wǎng)站上首頁(yè)
- 云南小程序公司
- 云南建設(shè)廳官方網(wǎng)站
- 全國(guó)前十名小程序開(kāi)發(fā)公司