微信小程序网络请求 wx.request 详解

在前面的学习中,我们已经掌握了小程序的界面构建和数据绑定。但一个完整的应用离不开与服务器的数据交互,比如获取用户信息、加载商品列表、提交表单数据等。今天,我们将学习小程序中实现网络通信的核心 API------wx.request(),它相当于小程序与服务器之间的"信使",负责在前端和后端之间传递数据。

一、什么是 wx.request

wx.request() 是小程序提供的网络请求 API,用于发起 HTTPS 请求,与指定的服务器接口进行数据交互。无论是获取数据(GET 请求)还是提交数据(POST 请求),都需要通过这个函数来实现。

1.1 基本特点

  • 无需声明 :wx.request 函数是微信小程序框架内置的,使用时不用声明,直接调用即可

  • HTTPS 限制:小程序要求所有网络请求必须使用 HTTPS 协议,确保数据传输安全

  • 域名限制:请求的域名必须在微信公众平台后台配置的合法域名列表中

1.2 域名配置要求

在小程序开发中,所有网络请求的域名都需要在微信公众平台进行配置:

配置步骤:

①登录微信公众平台

②进入小程序管理后台

③点击左侧菜单"开发" → "开发管理"

④选择"开发设置"选项卡

⑤找到"服务器域名"配置项

在这里可以添加 request 合法域名,注意以下几点:

  • 域名必须使用 HTTPS 协议

  • 一个域名只能配置最多 20 个合法域名

  • 一个月内最多能修改5次

微信开发者工具配置:

在开发过程中如果还没有配置HTTPS域名,为了方便调试,可以在微信开发者工具中临时关闭域名校验:

①打开微信开发者工具

②点击右上角"详情"

③在"本地设置"中勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"

也可以在项目配置中增加合法域名:

二、wx.request 的基本使用

2.1 请求方法的类型

| 方法 | 说明 | 使用场景 |
| GET | 获取数据 | 获取列表、查询详情、搜索等 |
| POST | 提交数据 | 登录、注册、创建新记录等 |
| PUT | 更新数据 | 修改用户信息、更新状态等 |

DELETE 删除数据 删除记录、移除项目等

wx.request() 接受一个对象作为参数,这个对象包含多个配置项来控制请求的各个方面。

2.2 主要参数说明

javascript

复制代码
wx.request({
  // 必填参数
  url: 'https://api.example.com/api/data',  // 服务器接口地址
  
  // 可选参数
  method: 'GET',           // 请求方法:GET、POST、PUT、DELETE 等,其他地方基本不变
  data: {                  // 请求参数(要发送给服务器的数据)
    id: 1,
    name: '张三'
  },
  header: {                // 设置请求的 header
    'content-type': 'application/json'
  },
  dataType: 'json',        // 返回的数据格式:json、text 等
  responseType: 'text',    // 响应的数据类型
  
  // 回调函数
  success: function(res) {
    // 请求成功时的处理
    console.log(res.data)
  },
  fail: function(err) {
    // 请求失败时的处理
    console.error(err)
  },
  complete: function() {
    // 请求完成时的处理(无论成功或失败都会执行)
    console.log('请求完成')
  }
})

三、实际应用示例

3.1 获取商品列表(GET 请求)

在实际开发中,我们经常需要在页面加载时自动获取数据:

javascript

复制代码
Page({
  data: {
    goodsList: [],      // 商品列表数据
    loading: true       // 加载状态
  },
  
  onLoad: function() {
    // 一进入页面就自动发起请求
    this.getGoodsList()
  },
  
  // 获取商品列表的方法
  getGoodsList: function() {
    wx.request({
      url: 'https://api.example.com/goods/list',
      method: 'GET',
      data: {
        page: 1,
        pageSize: 10
      },
      success: (res) => {
        if (res.statusCode === 200) {
          this.setData({
            goodsList: res.data.list,
            loading: false
          })
        }
      },
      fail: (err) => {
        console.error('获取商品列表失败:', err)
        this.setData({ loading: false })
        
        // 显示错误提示
        wx.showToast({
          title: '加载失败',
          icon: 'error'
        })
      }
    })
  }
})

在实际的开发项目中,有时为了不耽误项目进度,在前端开发阶段后端接口可能还没有准备好。这时候,我们可以使用一些模拟数据来进行前端开发和测试:

3.2 使用本地模拟数据

javascript

复制代码
// 在接口尚未开发完成时,可以使用模拟数据
getGoodsList: function() {
  // 开发阶段使用模拟数据
  const mockData = {
    list: [
      { id: 1, name: '商品1', price: 100 },
      { id: 2, name: '商品2', price: 200 },
      { id: 3, name: '商品3', price: 300 }
    ]
  }
  
  // 模拟网络请求延迟
  setTimeout(() => {
    this.setData({
      goodsList: mockData.list,
      loading: false
    })
  }, 500)
  
  // 实际接口开发完成后,再替换为真实的 wx.request 调用
  /*
  wx.request({
    url: 'https://api.example.com/goods/list',
    // ... 其他参数
  })
  */
}

注意: 这只是开发阶段的临时方案。当后端接口开发完成后,需要及时替换为真实的网络请求,并在微信公众平台配置合法的域名。

写在最后:

良好的网络请求处理不仅能实现功能需求,还能显著提升用户体验。在实际开发中,要合理规划开发进度,前端和后端协同工作,最终实现完整的网络通信功能。

相关推荐
YWamy6 小时前
如何降低RTC SDK在复杂网络环境下的运行成本
网络·音视频·实时音视频
北京盛世宏博7 小时前
信创国产化智慧档案馆管库系统:十二防一体化管控平台落地笔记
网络·方案·温湿度·智慧档案馆建设
w-w0w-w7 小时前
SQL注入
网络·数据库·sql
一条泥憨鱼7 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
北京盛世宏博8 小时前
数字孪生 3D 可视化实战:档案十防体系温湿度数据联动与告警定位实现
网络·档案八防·十防
Lynne3099 小时前
EtherCAT网络中,多个节点如何配置才能互不干扰?
网络·网络配置·ethercat·工业网络
视觉小萌新9 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
Yang96119 小时前
实验室里的多面手:鼎讯信通TM-150信号发生器技术拆解与实测思考
网络
默|笙11 小时前
【Linux网络】传输层协议TCP(1)---TCP报文介绍
linux·网络·tcp/ip
云飞云共享云桌面12 小时前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造