微信小程序5

news2025/1/12 19:46:38

一、什么是后台交互?

在小程序中,与后台交互指的是小程序前端与后台服务器之间的数据通信和请求处理过程。通过与后台交互,小程序能够获取服务器端的数据、上传用户数据、发送请求等。

与后台交互可以通过以下方式实现:

发起网络请求:小程序可以使用网络请求 API(如wx.request)向后台发送 HTTP 请求,来获取后台服务器返回的数据。可以使用 GET、POST、PUT、DELETE 等不同的请求类型来实现不同的操作。
WebSocket:小程序可以使用 WebSocket 技术与服务器建立长连接,实现实时的双向通信。通过 WebSocket,小程序能够及时接收服务器端推送的消息,实现实时更新和交互。
云函数:小程序提供了云开发平台,其中的云函数可以在后台服务器上执行,用于处理复杂的业务逻辑和数据处理。小程序可以通过调用云函数来与后台进行交互,并获取处理结果。
通过这些方式,小程序与后台交互可以实现数据的传输、用户认证、实时消息推送等功能,为用户提供更丰富的体验和功能。
 

二、后台数据交互与request封装 

1.准备

  • 在使用数据交互的时候我们要事先准备好后台的数据方便我们进行调用。
  • 我在这里就不准备后台的数据在这里了

 2.后台数据交互

在前面的博客里面编写了一个专门用来调用数据后台的一个api.js文件,我们要确保这些数据可以调用到后台,记得把你的后台启动哦!

// 以下是业务服务器API地址
 // 本机开发API地址
 

 var WxApiRoot = 'http://localhost:8080/wx/';
 
 module.exports = {
   IndexUrl: WxApiRoot + 'home/index' //首页数据接口
 };

2、在你要调用的页面的js里面编写调用的方法,注意记得打印一下你的数据是在那个属性里面,记得在Page的外面调用实用例

loadMeetInfos(){
      let that = this;
      wx.request({
          url: api. IndexUrl,
          dataType: 'json',
          success(res) {
              console.log(res)
              that.setData({
                lists: res.data.data.infoList
              })
          }
      })
    },

然后再定义好的onLoad方法里面调用

    onLoad() {
        if (wx.getUserProfile) {
            this.setData({
                canIUseGetUserProfile: true
            })
        }
        this.loadMeetingInfos();
    }

 3.request封装

在我们项目的里面有个utils/util,js文件,在里面进行一个方法编写

 
/**
 * 封装微信的request请求
 */
function request(url, data = {}, method = "GET") {
    return new Promise(function (resolve, reject) {
        wx.request({
            url: url,
            data: data,
            method: method,
            header: {
                'Content-Type': 'application/json',
            },
            success: function (res) {
                if (res.statusCode == 200) {
                    resolve(res.data);//会把进行中改变成已成功
                } else {
                    reject(res.errMsg);//会把进行中改变成已失败
                }
            },
            fail: function (err) {
                reject(err)
            }
        })
    });
}
module.exports = {
    formatTime,request
}

在你的需要调用的页面进行一个方法的调用进行代码的优化;就以上为例:

// 获取应用实例
const app = getApp()
const api = require("../../config/api")
const util = require("../../utils/util.js")
 //首页会议信息的ajax
    loadMeetingInfos() {
        let that = this;
 
        util.request(api.IndexUrl).then(res => {
            console.log(res)
            this.setData({
                lists: res.data.infoList
            })
        }).catch(res => {
            console.log('服器没有开启,使用模拟数据!')
        })
    }

效果是一样的

完整代码:utils.js

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : `0${n}`
}

/**
* 封装微信的request请求
*/
function request(url, data = {}, method = "GET") {
  return new Promise(function (resolve, reject) {
      wx.request({
          url: url,
          data: data,
          method: method,
          header: {
              'Content-Type': 'application/json',
          },
          success: function (res) {
              if (res.statusCode == 200) {
                  resolve(res.data);//会把进行中改变成已成功
              } else {
                  reject(res.errMsg);//会把进行中改变成已失败
              }
          },
          fail: function (err) {
              reject(err)
          }
      })
  });
}
module.exports = {
  formatTime,request
}

index.js

// index.js
// 获取应用实例
const app = getApp()
const api = require("../../config/api")
const util = require("../../utils/util.js")
Page({
    data: {
        imgSrcs: [{
            "img": "https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png",
            "text": "1"
        }],
        lists: []
    },
    //首页会议信息的ajax
    loadMeetingInfos() {
        let that = this;
        util.request(api.IndexUrl).then(res => {
            console.log(res)
            this.setData({
                lists: res.data.infoList
            })
            console.log(res.data.infoList)
        }).catch(res => {
            console.log('服器没有开启,使用模拟数据!')
        })
    },
    onLoad() {
        if (wx.getUserProfile) {
            this.setData({
                canIUseGetUserProfile: true
            })
        }
        this.loadMeetingInfos();
    }
})

三、wxs的使用

我们可以在微信的开发文档里面可以查看微信开放文档 (qq.com),wxs的使用。

1、使用wxs步骤

我们首先新建一个wxs文件在这个位置

2. 然后在里面定义方法

function getState(state){}
module.exports = {
    getState: getState
};

3.在wxml里面调用,src:是你的wxs的路径;module:你后面需要调用的名字,可以随便取。

    <wxs src="/utils/comm.wxs" module="tools" />

调用

<text class="list-num">{{tools.getState(item.state)}}</text>

2、完整方法 

wxs

 
function getState(state) {
    // 状态:0取消会议1待审核2驳回3待开4进行中5开启投票6结束会议,默认值为1
    if (state == 0) {
        return '取消会议';
    } else if (state == 1) {
        return '待审核';
    } else if (state == 2) {
        return '驳回';
    } else if (state == 3) {
        return '待开';
    } else if (state == 4) {
        return '进行中';
    } else if (state == 5) {
        return '开启投票';
    } else if (state == 6) {
        return '结束会议';
    }
 
    return '其它';
 
}
function getNumber(canyuze, liexize, zhuchiren) {
    var person = canyuze + ',' + liexize + ',' + zhuchiren;
    return person.split(',').length;
}
function formatDate(ts, option) {
    var date = getDate(ts)
    var year = date.getFullYear()
    var month = date.getMonth() + 1
    var day = date.getDate()
    var week = date.getDay()
    var hour = date.getHours()
    var minute = date.getMinutes()
    var second = date.getSeconds()
 
    //获取 年月日
    if (option == 'YY-MM-DD') return [year, month, day].map(formatNumber).join('-')
 
    //获取 年月
    if (option == 'YY-MM') return [year, month].map(formatNumber).join('-')
 
    //获取 年
    if (option == 'YY') return [year].map(formatNumber).toString()
 
    //获取 月
    if (option == 'MM') return [mont].map(formatNumber).toString()
 
    //获取 日
    if (option == 'DD') return [day].map(formatNumber).toString()
 
    //获取 年月日 周一 至 周日
    if (option == 'YY-MM-DD Week') return [year, month, day].map(formatNumber).join('-') + ' ' + getWeek(week)
 
    //获取 月日 周一 至 周日
    if (option == 'MM-DD Week') return [month, day].map(formatNumber).join('-') + ' ' + getWeek(week)
 
    //获取 周一 至 周日
    if (option == 'Week') return getWeek(week)
 
    //获取 时分秒
    if (option == 'hh-mm-ss') return [hour, minute, second].map(formatNumber).join(':')
 
    //获取 时分
    if (option == 'hh-mm') return [hour, minute].map(formatNumber).join(':')
 
    //获取 分秒
    if (option == 'mm-dd') return [minute, second].map(formatNumber).join(':')
 
    //获取 时
    if (option == 'hh') return [hour].map(formatNumber).toString()
 
    //获取 分
    if (option == 'mm') return [minute].map(formatNumber).toString()
 
    //获取 秒
    if (option == 'ss') return [second].map(formatNumber).toString()
 
    //默认 时分秒 年月日
    return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
function formatNumber(n) {
    n = n.toString()
    return n[1] ? n : '0' + n
}
 
function getWeek(n) {
    switch (n) {
        case 1:
            return '星期一'
        case 2:
            return '星期二'
        case 3:
            return '星期三'
        case 4:
            return '星期四'
        case 5:
            return '星期五'
        case 6:
            return '星期六'
        case 7:
            return '星期日'
    }
}
module.exports = {
    getState: getState,
    getNumber: getNumber,
    formatDate:formatDate
};

index.wxml

<view class="indexbg">
    <swiper autoplay="true" indicator-dots="true" indicator-color="#fff" indicator-active-color="#00f">
        <block wx:for="{{imgSrcs}}" wx:key="text">
            <swiper-item>
                <view>
                    <image src="{{item.img}}" class="swiper-item" />
                </view>
            </swiper-item>
        </block>
    </swiper>
    <wxs src="/utils/comm.wxs" module="tools" />
    <view class="mobi-title">
        <text class="mobi-icon">❤</text>
        <text class="mobi-text">会议信息</text>
    </view>
    <block wx:for-items="{{lists}}" wx:for-item="item" wx:key="item.id" class="bg">
        <view class="list" data-id="{{item.id}}">
            <view class="list-img">
                <image class="video-img" mode="scaleToFill" src="{{item.image != null ? item.image:'/static/persons/8.jpg'}}"></image>
            </view>
            <view class="list-detail">
                <view class="list-title"><text>{{item.title}}</text></view>
                <view class="list-tag">
                    <view class="state">{{tools.getState(item.state)}}</view>
                    <view class="join"><text class="list-num">{{tools.getNumber(item.canyuze,item.liexize,item.zhuzhiren)}}</text>人报名</view>
                </view>
                <view class="list-info"><text>{{item.location}}</text>|<text>{{tools.formatDate(item.starttime,'YY-MM-DD hh-mm-ss')}}</text></view>
            </view>
        </view>
    </block>
    <view class="section">
        <text>到底啦</text>
    </view>
</view>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1127865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java对象深拷贝(Mapstruct)代码实现

这几天写的需求正在提测中&#xff0c;所以比较有空闲时间&#xff0c;正好来总结一下开发中遇到的问题并记录一下。 在开发过程中遇到这样一个问题&#xff1a;多个对象实体间要进行对象拷贝&#xff0c;并且对象里面还包含别的对象集合&#xff0c;对象名字也不同&#xff0…

那些只要一两行代码就能搞定的Python操作

Python是一种简洁、易读且功能强大的编程语言&#xff0c;有很多操作只需要一行代码就能完成。本文将介绍一些常用的单行代码操作&#xff0c;并分析其技术原理&#xff0c;让读者更深入地理解Python的简洁与高效。 1、列表推导式 列表推导式是Python中一种简洁的构造列表的方法…

STM32:外部中断

中断&#xff0c;顾名思义就是停止现在正在干的活&#xff0c;去干其他更紧急的事情。在通常的信息系统中&#xff0c;中断发生时&#xff0c;会先保留现场&#xff0c;即当前的运行情况和状态。在去做其他紧急事情。事情做完还要恢复原先中断前的状态继续干原来的活。在STM32中…

python 字典dict和列表list的读取速度问题, range合并

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候&#xff0c;需要读取较大数据&#xff08;2.7G&#xff09;存入字典中&#xff0c; 然后对被处理数据进行字典key值的匹配&#xff0c;在被处理文件中每次…

模拟开关与多路复用器

模拟开关 模拟开关现在有两种工艺&#xff0c;模拟开关与cmos工艺 CMOS模拟开关收到温度还有供电电压影响&#xff0c;尽量供电高一点 jfet断电导通&#xff0c;cmos断电断开 因为寄生电容&#xff0c;交流信号会漏过模拟开关 没有负电源脚不能传交流电&#xff0c…

windows安装docker,解决require wsl 2问题

想在windows上安装桌面版docker&#xff0c;上官网下载了安装包&#xff0c;安装完后&#xff0c;启动报错&#xff0c;忘了截图了。 大概意思就是require wsl 2。 于是就是docker FAQ中找相关问题解决方案&#xff0c;点&#xff0c;点&#xff0c;点然后就点到微软了。 ws…

重入漏洞EtherStore

重入漏洞 // SPDX-License-Identifier: MIT pragma solidity ^0.8.13;contract EtherStore {mapping(address > uint) public balances;function deposit() public payable {balances[msg.sender] msg.value;}function withdraw() public {uint bal balances[msg.sender]…

干货分享 | TSMaster几种过滤器的对比及使用

TSMaster的4种过滤器&#xff1a; //硬件过滤器&#xff1a;可以在硬件端针对数据位进行筛选过滤&#xff0c;硬件过滤。在硬件端阻止接收一部分不需要的报文&#xff0c;留更多带宽对其他报文进行接收。 // 数据流过滤器&#xff1a;过滤总线数据流&#xff0c;软件过滤。操…

A股风格因子看板 (2023.10 第11期)

该因子看板跟踪A股风格因子&#xff0c;该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子&#xff0c;用以分析市场风格切换、组合风格暴露等。 今日为该因子跟踪第11期&#xff0c;指数组合数据截止日2023-09-30&#xff0c;要点如下 近1年A股风格因子检验统…

gin框架初识

先引入gin的包 终端执行 go get -u github.com/gin-gonic/gin 代码 package mainimport ("github.com/gin-gonic/gin""net/http" )func main() {r : gin.Default() //默认的路由引擎r.GET("/book", func(c *gin.Context) {c.JSON(http.Statu…

muduo源码学习base——Exception(带 stack trace 的异常基类)

Exception(带 stack trace 的异常基类&#xff09; 前置ExceptionCurrentThread::stackTrace() 前置 ABI: Application Binary Interface&#xff0c;应用程序二进制接口&#xff0c;可以参考&#xff1a;细谈ABI RTTI type_info: RTTI&#xff1a;Run Time Type Identificatio…

js给一段话,遇到的第一个括号处加上换行符

list.forEach((item,index0)>{const productName item.name;const index productName.indexOf(&#xff08;);if (index -1) {return productName;}const before productName.slice(0, index);const after productName.slice(index);item.namebefore \n after;});

算法学习(七)判断一个二叉树是否为完全二叉树

描述 给定一个二叉树&#xff0c;确定他是否是一个完全二叉树。 完全二叉树的定义&#xff1a;若二叉树的深度为 h&#xff0c;除第 h 层外&#xff0c;其它各层的结点数都达到最大个数&#xff0c;第 h 层所有的叶子结点都连续集中在最左边&#xff0c;这就是完全二叉树。&a…

值改变事件(SMART PLC梯形图FC)

值改变事件在通信速度优化上的应用,请查看下面文章链接: C#winform事件驱动 值改变事件 PLC寄存器值改变_plc数据变化触发条件_RXXW_Dor的博客-CSDN博客Modbus通讯时,设置值发生改变时,我们希望启动一次请求帧,发送写数据帧,这个功能,在C#winform里很容易实现,因为有对…

“唯品会VIP商品搜索API:尊享购物体验,一键获取心仪商品!“

唯品会按关键字搜索VIP商品API是一项面向唯品会VIP用户的API服务&#xff0c;它主要用于在唯品会网站上根据用户指定的关键字快速搜索到VIP商品&#xff0c;并提供商品详情、价格、库存量、评价等信息。这个API的核心功能是为用户提供便捷且准确的搜索服务&#xff0c;让用户能…

探索二次开发途径

一、什么是二次开发&#xff1f; 软件二次开发&#xff0c;也被称为定制开发或应用开发&#xff0c;是指在已有的软件基础上&#xff0c;通过编写自定义代码或应用程序来满足特定需求&#xff0c;扩展现有软件的功能。这种方式可在满足定制需求的同时&#xff0c;减少了开发新…

【会议征稿通知】第二届语言与文化传播国际学术会议(ICLCC 2024)

第二届语言与文化传播国际学术会议&#xff08;ICLCC 2024&#xff09; The 2nd International Conference on Language and Cultural Communication 第二届语言与文化传播国际学术会议&#xff08;ICLCC 2024&#xff09;的目标是将语言与文化传播领域的创新学者和行业专家聚…

利用ChatGPT自动生成基于PO的数据驱动测试框架

简介 PO&#xff08;PageObject&#xff09;设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类&#xff0c;并以页面为单位来写测试用例&#xff0c;实现页面对象和测试用例的分离。 数据驱动测试&#xff08;DDT&#xff09;是一种方法&#xff0c…

有奖招募——2023年度清华社“荐书官”活动今日开始了!

又到“1024程序员节”了&#xff0c;维护网络世界稳定和平的程序员大大们&#xff0c;辛苦了&#xff01;生活难免有bug&#xff0c;来给彼此个hug~ 过完1024&#xff0c;这一年也快要结束了&#xff0c;岁末回顾又要提上日程。很多人都有整理年度书单的习惯&#xff0c;那么这…

服务器数据恢复-服务器系统损坏启动蓝屏的数据恢复案例

服务器故障&分析&#xff1a; 某公司一台华为机架式服务器&#xff0c;运行过程中突然蓝屏。管理员将服务器进行了重启&#xff0c;但是服务器操作系统仍然进入蓝屏状态。 导致服务器蓝屏的原因非常多&#xff0c;比较常见的有&#xff1a;显卡/内存/cpu或者其他板卡接触不…