欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

微信小程序項(xiàng)目遇見問題三:有時候undefined不一定就是undefined | 解決微信小程序每 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(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)案例查看更多