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

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

159-8711-8523

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

知識(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)案例查看更多