微信小程序之网络请求简单封装实例详解

发布时间 - 2026-01-11 02:05:55    点击率:

微信小程序之网络请求简单封装实例详解

在微信小程序中实现网络请求相对于Android来说感觉简单很多,我们只需要使用其提供的API就可以解决网络请求问题。

  • 普通HTTPS请求(wx.request)
  • 上传文件(wx.uploadFile)
  • 下载文件(wx.downloadFile)
  • WebSocket通信(wx.connectSocket)

为了数据安全,微信小程序网络请求只支持https,当然各个参数的含义就不在细说,不熟悉的话可以;可以去阅读官方文档的网络请求api,当我们使用request时header的content-typ默认是application/json,在文档中指出method 的value必须是大写,不过经过测试,小写也能请求成功。request默认的超时时间是60s,如果我们想自定义超时时间,我们可以在app.json中加入下面代码片段,分别设置request,socket,和上传文件及下载文件的超时时间。

"networkTimeout": {
  "request": 5000,
  "connectSocket": 5000,
  "uploadFile": 5000,
  "downloadFile": 5000
 }

设置过超时时间,我们就开始封装网络请求,平时我们所接触的网络请求,一般会分为两类,一类是在后台运行的,没有加载对话框提示,另一种就是有提示,如提示正在加载数据,,那么我们就以此为线索来进行封装。先创建一个network的网络请求工具类,然后

// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) {
 console.log(params)
  wx.showLoading({
   title: message,
  })
 wx.request({
  url: url,
  data: params,
  header: {
   'content-type': 'application/x-www-form-urlencoded'
  },
  method: 'post',
  success: function (res) {
   //console.log(res.data)
    wx.hideLoading()
   if (res.statusCode == 200) {
    success(res.data)
   } else {
    fail()
   }

  },
  fail: function (res) {
    wx.hideLoading()
    fail()
  },
  complete: function (res) {

  },
 })
}

上面函数很好理解,参数的含义已在代码中解释,在网络请求开始前,先展示Loading对话框,提示用户当前网络正在请求数据,当网络请求成功或者失败后调用wx.hideLoading()取消提示框的展示。在api中还提供了wx.showNavigationBarLoading()用于显示当前页面的导航条加载动画,那么如果我们想展示这个动画可以在requestLoading执行开始调用wx.showNavigationBarLoading(),然后在网络请求成功或者失败后调用wx.hideNavigationBarLoading()隐藏导航栏加载动画。

当网络请求成功并且状态码为200时,将请求到的数据回调通过success(res.data)回调给我们的方法,在上面我们没有对失败原因进行细分,当然你也可以给失败回调加个参数,用于提示用户失败的原因,如res.statusCode ==500时提示服务器内部错误,res.statusCode ==-1时提示请检查网络,res.statusCode ==404,找不到地址等等。

然后我们在创建一个不显示对话框,用户后台请求数据的请求函数,为了少写代码,我们共用上面的函数,如下

//不显示对话框的请求
function request(url, params, success, fail) {
 this.requestLoading(url, params, "", success, fail)
}

我们看到我们最终还是调用的requestLoading,那么我们可以在该函数作下判断,如果提示信息message==''就不显示对话框。

最终的代码

function request(url, params, success, fail) {
 this.requestLoading(url, params, "", success, fail)
}
// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// success:成功的回调函数
// fail:失败的回调
function requestLoading(url, params, message, success, fail) {
 console.log(params)
 wx.showNavigationBarLoading()
 if (message != "") {
  wx.showLoading({
   title: message,
  })
 }
 wx.request({
  url: url,
  data: params,
  header: {
   //'Content-Type': 'application/json'
   'content-type': 'application/x-www-form-urlencoded'
  },
  method: 'post',
  success: function (res) {
   //console.log(res.data)
   wx.hideNavigationBarLoading()
   if (message != "") {
    wx.hideLoading()
   }
   if (res.statusCode == 200) {
    success(res.data)
   } else {
    fail()
   }

  },
  fail: function (res) {
   wx.hideNavigationBarLoading()
   if (message != "") {
    wx.hideLoading()
   }
   fail()
  },
  complete: function (res) {

  },
 })
}
module.exports = {
 request: request,
 requestLoading: requestLoading
}

使用就很简单了,如下

//路径根据自己项目路径修改
var network = require("/utils/network.js")
getData:function(){
  network.requestLoading(URL.MY_SCORE, that.data.params, '正在加载数据', function (res) {
  //res就是我们请求接口返回的数据
   console.log(res)
  }, function () {
   wx.showToast({
    title: '加载数据失败',
   })
  })
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 微信小程序之网络请求简单封装  # 小程序  # 网络请求封装  # 微信小程序网络请求封装示例  # 微信小程序网络请求的封装与填坑之路  # 详解微信小程序网络请求接口封装实例  # 微信小程序中如何使用flyio封装网络请求  # 微信小程序网络请求模块封装的具体实现  # 回调  # 对话框  # 提示信息  # 进度条  # 加载  # 我们可以  # 创建一个  # 正在加载  # 上传文件  # 文档  # 是在  # 很好  # 是有  # 就不  # 找不到  # 也能  # 给我们  # 希望能  # 很简单  # 自定义 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何实现javascript表单验证_正则表达式有哪些实用技巧  如何快速上传自定义模板至建站之星?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在阿里云购买域名并搭建网站?  韩国服务器如何优化跨境访问实现高效连接?  python中快速进行多个字符替换的方法小结  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  ,怎么在广州志愿者网站注册?  如何在建站之星绑定自定义域名?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何正确下载安装西数主机建站助手?  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何处理和验证JSON类型的数据库字段  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何在阿里云香港服务器快速搭建网站?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何快速搭建安全的FTP站点?  Java遍历集合的三种方式  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  Python文件异常处理策略_健壮性说明【指导】  javascript中的try catch异常捕获机制用法分析  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Python文件流缓冲机制_IO性能解析【教程】  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  微信小程序 wx.uploadFile无法上传解决办法  Laravel集合Collection怎么用_Laravel集合常用函数详解  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel如何使用Blade模板引擎?(完整语法和示例)  bing浏览器学术搜索入口_bing学术文献检索地址  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  网站建设整体流程解析,建站其实很容易!  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel怎么调用外部API_Laravel Http Client客户端使用  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何记录自定义日志?(Log频道配置)  如何快速搭建高效香港服务器网站?  在centOS 7安装mysql 5.7的详细教程  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何用PHP工具快速搭建高效网站?