微信小程序开发问答《七十三》上传logo返回后不能同步

1、微信小程序登录相关问题?

先说下我所理解的:

wx.checksession() 只能检查用code换来的session_key在微信服务器中是否过期。
而前端拿到后台生成的3rd_session, 这个3rd_session的过期时间是服务器定义的。
如果上面的理解没错的话(有错误望指出),我猜想就会出现下面两种情况:

wx.checkSession()检测的微信服务器session_key并没有过期。而我们服务器3rd_session 已经过期,这时候怎么办,是否要重新走一遍登录流程。
wx.checkSession()已过期,这种情况下,当然不管3rd_session是否过期,都需要重新走一遍登录流程来重置, 这样处理对吗。
根据以上,那是不是每次http请求都要先wx.checkSession()来检测是否过期呢。并且我怀疑会有情况一出现的可以,这个过期并不能判定3rd_session是否过期。

所以,感觉很混乱。想知道大家是怎么处理的。
答:我认为,既然自己的服务器已经维护了一套session,客户端是没有必要关注wx.checksession() 的。
如果想知道是否过期,问自己的服务器就好了,就像楼上所说,小程序的这些接口没有次数限制,由服务端自己去处理
1.3rd_session未过期,session_key过期,则服务器自己更新session_key就好
2.3rd_session过期,session_key未过期,更新服务器3rd_session就好(重新走流程)

可以试试将获取到的 session 登录信息存到 sessionStorage 里面。

2、微信小程序的转发方法 onShareAppMessage 内可以定义转发内容之外的逻辑吗?

根据文档 转发 ,小程序内的转发方法 onShareAppMessage 需要直接返回一个包含转发内容的对象,该对象内的 path 值为接受转发者看到的页面路径。例如

Page({
  onShareAppMessage: function (res) {
    return {
      title: '自定义转发标题',
      path: '/page/user?queryId=123',
      success: function(res) {
        // 转发成功
      },
    }
  }
})
假如拼接 path 值所需的 queryId 是由一个请求返回的,即不能同步获取到,例如

Page({
  onShareAppMessage: function (res) {
    let queryId = ''
    wx.request({
      url: '...',
      method: 'GET',
      success (res) {
        queryId = res.queryId
      },
    })
    return {
      title: '自定义转发标题',
      path: `/page/user?queryId=${queryId}`,
      success (res) {
        // 转发成功
      },
    }
  }
})
那么 JavaScript 有没有什么方法可以使以上的 onShareAppMessage 方法直接返回有效的 queryId 呢,用 promise 之类的话?

答:我改了那个weixin.js



还有种就是可以不传link,会动态获取当前url,也就是你可以在url上附加#aa这种,也可以获取到

3、微信小程序 上传logo返回后不能同步

// persondata.js
var gainData = require("../../utils/getRequestData.js");
var uploadFile = require("../../utils/uploadFile.js");
var imgUrl = require("../../config/urls.js");
var app = getApp();

Page({
data: {

imgurl: app.globalData.imgurlb,
uploadImgUrl: '/api2/file/upload',
url: '/api2/user/edit',
info_url: '/api2/user/info',
img_url: imgUrl.IMGURL,
icon_url: imgUrl.ICONURL,
logoUrl: '',
personInfo: null,
sure_clicked: false,
msg: ''
},

/**
 * 修改个人LOGO
 * @return null
 */
showImage: function () {

var that = this;
wx.showActionSheet({
  itemList: ['拍照', '我的相册'],
  success: function (res) {
    var change_type = [];
    if (res.tapIndex == 0) {
      change_type = ['camera'];
    } else if (res.tapIndex == 1) {
      change_type = ['album'];
    } else {
      return;
    }
    wx.chooseImage({
      count: 1, //默认9
      sizeType: ['original', 'compressed'],
      sourceType: change_type,
      success: function (arg) {
        // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
        var tempFilePaths = arg.tempFilePaths[0];
        wx.showLoading({
          title: '图片上传中',
        });
        that.setData({
          logoUrl: tempFilePaths
        });
        uploadFile.uploadFile(tempFilePaths, that.data.uploadImgUrl, that.uploadImgSuccess, that.uploadImgError);
      }
    });
  }
});
},

/**
 * 将上传的图片发向后台
 * @return null
 */
changeLogo: function () {

gainData.getRequestData('POST', this.data.url + "?head=" + this.data.logoUrl, "", this.setUserList, this.errorData);
},

/**
 * 请求成功返回的操作
 * @param  object arg 请求成功返回的数据
 * @return null
 */
setUserList: function (arg) {

var that = this;
wx.hideLoading();
var data = arg.data;
if (data.status == 1) {
  that.setData({
    sure_clicked: true,
    msg: data.msg
  });
  setTimeout(function () {
    that.setData({
      sure_clicked: false,
      msg: ''
    });
    that.getData();
  }, 1500);
} else {
  wx.hideLoading();
  that.setData({
    sure_clicked: true,
    msg: '图片保存失败'
  });
}
},

/**
 * 获取数据失败是的操作
 * @param  object arg 错误是返回的对象
 * @return null
 */
errorData: function (arg) {

wx.hideLoading();
this.setData({
  sure_clicked: true,
  msg: '获取数据失败'
});
},

/**
 * 图片上传成功
 * @return null
 */
uploadImgSuccess: function (arg) {

wx.hideLoading();
var ret = JSON.parse(arg.data);
if (ret.status == 1) {
  var net_img_url = ret.data[0].normal;
  console.log(net_img_url)
  this.setData({
    logoUrl: net_img_url
  });
  wx.showLoading({
    title: '图片保存中'
  });
  this.changeLogo();
} else {
  this.setData({
    sure_clicked: true,
    msg: '图片上传失败'
  });
}
},

/**
 * 图片上传失败
 * @return null
 */
uploadImgError: function (arg) {

wx.hideLoading();
this.setData({
  sure_clicked: true,
  msg: '图片上传失败'
});
},

/**
 * 通过全局变量获取公司信息并设置
 * @return null
 */
setDataFromGlobal: function () {

var that = this;
that.setData({
  personInfo: app.globalData.userinfo1
});
},

/**
 * 获取我的数据
 * @return null
 */
getData: function () {

wx.showLoading({
  title: '数据更新中',
  mask: true
});
gainData.getRequestData('GET', this.data.info_url, "", this.successData, this.errorData);
},
/**

请求成功时候的操作
@param object arg 请求成功返回的数据
@return null
*/
successData: function (arg) {

wx.hideLoading();
var data = arg.data;
if (data.status == 1) {
  app.globalData.userinfo1 = data.data;
  console.log(app.globalData.userinfo1)
} else {
  this.setData({
    sure_clicked: true,
    msg: '数据更新失败'
  });
}
},

/**
 * 页面加载完成立即执行
 * @return null
 */
onLoad: function () {

 var that = this;
  that.setData({
  personInfo: app.globalData.userinfo1,
  logoUrl: app.globalData.userinfo1.userInfo.head
 });       
  console.log(this.data.logoUrl);
  this.setDataFromGlobal();
  //this.getData();
},

/**
 * 下拉刷新
 * @return null
 */
onPullDownRefresh: function () {

wx.stopPullDownRefresh();
this.onLoad();
}
});
以上是上传logo代码 上传

这个页面
<view class="box" bindtap="showImage" >
<view class="box-1 mt-40">

<view class="ml-25">头像</view>
</view>
<image mode="" class="one" src="{{logoUrl?img_url+logoUrl:'../images/person.png'}}"></image>
<image mode="" src="{{imgurl}}right-icon.png" class="two"></image>
</view>

以下是个人中心一级页面 logo头像
//my.js
var imgUrl = require('../../config/urls.js');
var gainData = require("../../utils/getRequestData.js");
var app = getApp();
Page({
data: {

imgurl: app.globalData.imgurlb,
url: '/api2/user/logout?device=1',
img_url: imgUrl.IMGURL,
icon_url: imgUrl.ICONURL,
personInfo: '',
sure_clicked: false,
msg: '',
logoUrl:''
},
/**

通过全局变量获取公司信息并设置
@return {[type]} [description]
*/
setDataFromGlobal: function () {

var that = this;
that.setData({
  personInfo: app.globalData.userinfo1,
  logoUrl: app.globalData.userinfo1.userInfo.head
})
console.log(this.data.personInfo)
},
/**

页面加载完成后立即执行
@return null
*/
onLoad: function () {

this.setDataFromGlobal();
},
/**

下拉刷新
@return null
*/
onPullDownRefresh: function (e) {

var that = this;
wx.stopPullDownRefresh();
this.onLoad();
}
});

这个是wxml代码
<navigator url="/pages/my/persondata"> 
<view class="box">

 <image mode="aspectFill" src="{{logoUrl?img_url+logoUrl:'../images/person.png'}}" class="one"></image> 
<view class="box-1 mt-40">
  <view>{{personInfo.userInfo.realname}}</view>
  <view class="mt-10 ft-30">市场部</view>
</view>
<image src="{{imgurl}}right-icon.png" class="two"></image>
</view>
</navigator>

就是上传后返回不能自动刷新新的图片

没有同步 我加了手动刷新才行 有什么方法可以解决的

答:小程序里只能用setData更新页面,页面不会自动更新的,所以你只能在onShow的钩子里更新。

当然你也可以在当前页面更新上一个页面。


var pages = getCurrentPages();

var currPage = pages[pages.length - 1];   //当前页面

var prevPage = pages[pages.length - 2];  //上一个页面

prevPage.setData({...})


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

本文作者2017-9-14 00:49
众观小程序
粉丝0 阅读43 回复0
上一篇:
小程序是微信开启的一种自我保护程序,你觉得呢?发布时间:2017-09-13
下一篇:
多元化对象里面的一个案例“玩社群发布时间:2017-09-14

精彩阅读

排行榜

小程序互动交流社区
181-2013-0473
周一至周五 9:00-18:00
意见反馈:79354359@qq.com

扫一扫联系我们