文章目录

  • 前言
  • 一、准备
  • 二、网络请求
    • 1.微信小程序请求网络的方法
    • 2.发送网络请求
    • 3.网络请求的封装
    • 4.网络返回请求数据的处理
  • 三、本地存储

前言

这节我们来看下在微信小程序中如何进行网络请求的。


一、准备

在调用网络请求方法之前需要做一些配置否则会导致请求不成功,有两种配置方式:
1、在 小程序后台-开发-开发设置-服务器域名 中进行配置。打开 后台>开发管理>开发设置,在开发设置中可以添加服务器域名,配置为服务器域名后,可与小程序进行网络通信。

2、还可以打开微信开发工具>详情>本地设置,将不校验合法域名这一选项勾选。

二、网络请求

1.微信小程序请求网络的方法

小程序提供了组件wx.request来发送网络请求:

RequestTask wx.request(Object object)

主要的参数说明:

2.发送网络请求

注:本文章使用的接口来自黑马优购小程序的接口文档

发送请求的代码如下:

//1发送异步请求获取轮播图数据wx.request({url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',success: (result) => {console.log(result)this.setData({swiperList:result.data.message})},fail: (res) => {},complete: (res) => {},})

该处使用的url是网络接口请求的地址
若请求成功数据会通过success的参数result获得,通过result.data.message可以取到返回的数据。
我们可以打印或者通过调试器里的AppData查看变量是否获取到我们请求的数据了:

3.网络请求的封装

以上网络请求在同时请求或者嵌套请求时可能会出现问题,导致请求失败,这就是我们都知道回调地狱,那么这里我们如何去处理呢?
1、通过es6的promise技术,我们将处理封装在request/request.js文件下,具体代码如下:

export const request=(params)=>{return new Promise((resolve,reject)=>{wx.request({...params,  //传入的就是 url:"https://api-hmugo-....."success:(result)=>{resolve(result);},fail:(err)=>{reject(err);},complete:()=>{//加载完成}}})})
}

然后我们在请求页面的js文件下引入request/request.js文件,

//通过解构的方式来引入request方法
import { request } from "../../request/index.js";

使用封装的request方法,

request({url:"https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata"}).then(result=>{this.setData({swiperList:result.data.message})})

2、优化请求方法的细节(request/request.js文件内容的优化)
1)url地址特别长
我们一般一个项目里调用的接口,前面一部分地址都是相同的,区别就在后面 的方法名,这里我们可以提取公共的url:

const baseUrl = "https://api-hmugo-web.itheima.net/api/public/v1"

然后对url进行拼接:

url:baseUrl+params.url,

2)添加加载效果
在网络请求数据请求的过程中,可以添加一些等待效果,使用加载框wx.showLoading

//显示加载效果wx.showLoading({title: '加载中',mask:true //显示蒙版})

在响应返回,获取到数据或者请求失败的时候就i取消加载:

wx.hideLoading()

试想若多个接口同时请求,他们同时请求其响应肯定是不同步的,可能会导致加载框显示出现消失又出现这样的情况,为了避免我们添加一个变量,用于等待得到全部响应后取消加载框:

//同时发送异步代码的次数
let ajaxTimes = 0;

整合以上优化,完整代码如下:

//同时发送异步代码的次数
let ajaxTimes = 0;export const request=(params)=>{ajaxTimes++;//显示加载效果wx.showLoading({title: '加载中',mask:true //显示蒙版})//定义公共的urlconst baseUrl = "https://api-hmugo-web.itheima.net/api/public/v1"return new Promise((resolve,reject)=>{wx.request({...params,  //传入的就是 url:"https://api-hmugo-....."url:baseUrl+params.url,success:(result)=>{resolve(result.data.message);},fail:(err)=>{reject(err);},complete:()=>{ //加载完成//ajaxTimes是判断 同时请求全部返回的时候,关闭加载ajaxTimes--;if(ajaxTimes===0){wx.hideLoading()}}})})
}

3、使用ES7的 asyncawait技术 发送请求(同步的方式请求异步)

async getGoodsList(){//接口请求const res = await request({url:"/goods/search",data:this.QueryParams});//获取请求数据const total = res.total;},

其中data:this.QueryParams是请求参数对象

//接口需要传的参数QueryParams :{query:"",cid:"",pagenum:1,pagesize:10},

4.网络返回请求数据的处理

我们获取到接口返回的数据之后,通过 setData 将其绑定到逻辑层的变量goodsObj 对象中,

this.setData({goodsObj})

这样goodsObj 对象中是返回的完整的数据,但是我们在渲染页面或者处理逻辑的时候,可能只需要接口返回的部分数据,这时我们可以取出我们所需要哪些字段的数据:

this.setData({goodsObj:{// goodsObj 后台返回的数据可能有的是不需要的,所以只要取部分需要的数据即可goods_name:goodsObj.goods_name,goods_price:goodsObj.goods_price,pics:goodsObj.pics}})

三、本地存储

我们通过网络请求请求后台数据,有些数据信息是需要存储在本地的,可以通过微信小程序的本地存储技术来实现:

需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象,方法如下。
1、同步
(1)wx.setStorageSync(); //存储值
(2)wx.removeStorageSync(); // 移除指定的值
(3)wx.getStorageSync(); // 获取值
(4)wx.getStorageInfoSync(); // 获取当前 storage 中所有的 key
(5)wx.clearStorageSync(); // 清除所有的key

2、异步
(1)wx.setStorage(); //存储值
(2)wx.removeStorage(); // 移除指定的值
(3)wx.getStorage(); // 获取值
(4)wx.getStorageInfo(); // 获取当前 storage 中所有的 key
(5)wx.clearStorage(); // 清除所有的key

获取缓存数据:

// ||[] 将得到的缓存数据转换为数组格式
let cart = wx.getStorageSync('cart')||[];

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容:

wx.setStorageSync('cart', cart)

数据存储生命周期跟小程序本身一致,即除用户主动删除或超过一定时间被自动清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。

5、微信小程序-网络请求和本地存储相关推荐

  1. 微信小程序网络请求配置问题及本地网络请求测试解决方案

    本文只针对服务器网站没有备案或只需要做本地网络接口请求 一.问题引入 在小程序demo.wxml中声明button控件,并设置点击事件,如下: <button bindtap='testSend ...

  2. 微信小程序网络请求异常怎么办_解决·微信小程序开发-网络请求报Invalid request 400错误...

    今天学习了一下微信小程序的入门开发,在使用网络请求时,发现根据微信官方的API的方法进行操作出现Invalid request 400错误,到底怎么回事呢? 首先我们来看微信API网络请求 示例代码: ...

  3. 微信小程序 网络请求接口 及 生命周期

    前言:前期我们对微信小程序有些基本了解,像标签,样式,组件....等. 今天我们继前期进行继续的了解 一. 网络请求 HTTP(HyperText Transfer Protocol)是一套计算机通过 ...

  4. 微信小程序网络请求 - 设置合法域名

    微信小程序设置网络请求 官方文档 为什么要设置合法域名呢 ? 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信.包括普通 HTTPS 请求(wx.request).上传文件(w ...

  5. 微信小程序网络请求异常怎么办_监控微信小程序wx.request请求失败

    在微信小程序里,与后台服务器交互的主要接口函数是wx.request(),用于发起 HTTPS 网络请求.其重要性不言而喻.然而,却经常遇到请求失败的问题,笔者特意谷歌"wx.request ...

  6. 微信小程序 网络请求之设置合法域名

    设置域名 登录微信公众号后台小程序中 设置→开发设置→服务器设置 必须设置域名,微信小程序才能进行网络通讯,不然会报错 如果设置好了合法域名,开发工具还提示不在合法域名列表中,因为在微信会有一段时间的 ...

  7. 微信小程序网络请求之设置合法域名后不显示oss、cos的图片问题

    一.开启oss防盗链设置 把此https://servicewechat.com链接加入到防盗链中 就可以访问 由于网站图片都上传在了腾讯云COS,微信小程序端不显示网站图片 原因: 腾讯云COS启用 ...

  8. 微信小程序网络请求异常怎么办_微信小程序打开提示“网络异常,请检查网络状态”的解决方法...

    症状:打开微信小程序的时候,提示"网络异常,请检查网络状态",无法加载数据. 问题客户端:安卓手机 经过测试:IOS和微信桌面版,均正常. 唯独安卓手机不行,如下图所示,这个问题不 ...

  9. 微信小程序网络请求代码片段

    在微信小程序根目录建立/static/js/lsk.js.输入以下代码 function dopost(api,params,callback){var webhost="http://ne ...

最新文章

  1. camera摄像原理之三:色温和自动白平衡【转】
  2. 决赛评审招募 | 学生创意能有多不羁?快来网易看决赛!
  3. 一文看懂华为鸿蒙 OS 2.0
  4. Ubuntu 下的PDF阅读器
  5. 【郝斌C语言课程】学习笔记
  6. CrossApp推出移动应用开发神器CrossApp Style
  7. 航空公司客户价值数据的分析
  8. 支持向量机的特点,优点缺点
  9. 淘宝测试开发实习总结
  10. ## Myql的常见命令及语法规范
  11. 人生需有三心境,你有吗?
  12. 干货!任务型对话中的知识管理
  13. Java后端学Android(13)-使用网络技术
  14. 只有年轻人才能做数据分析师吗?
  15. 让我们一起开发【菜谱系统】吧,滚雪球学 Python 第三轮项目计划
  16. 基于matlab了光纤模式图,基于matlab光纤的模式图模拟
  17. 使用Matlab转换高阶方程自变量和因变量
  18. Java毕设项目高校体育场馆预约管理系统设计与实现(java+VUE+Mybatis+Maven+Mysql)
  19. 实达已经不是那个实达,而叶成辉还是那个叶成辉
  20. 《乐高EV3机器人搭建与编程》——2.6 传感器

热门文章

  1. 中国支付结算系统发展简史
  2. RecyclerView之点击item变色
  3. Git 分支 - 变基示例操作
  4. wandb使用方法以及具体设置
  5. mysql excel 同步数据_mysql导入excel数据
  6. 博士毕业年龄如何计算机,紧缺专业博士因年龄问题,毕业等于失业(转载)
  7. 读书:每天做一个情绪稳定的成年人!
  8. 最新xampp安装教程与配置
  9. 1-4 Java方法和数组
  10. iqq for linux源代码,开源qq下载-Linux开源QQ 2012(iQQ)下载 v1.0.2 免费版-IT猫扑网