微信小程序网络请求 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',
    // ... 其他参数
  })
  */
}

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

写在最后:

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

相关推荐
newsxun3 小时前
从一条国道,到一个时代符号——申晨案例解析:如何打造公路文旅现象级IP「此生必驾318」
网络·网络协议·tcp/ip
嗯嗯=3 小时前
STM32单片机学习篇5
stm32·单片机·学习
Bruce_Liuxiaowei3 小时前
基于抓包分析的组播视频流故障排查与解决
网络·网络协议·wireshark·信号处理
wniuniu_3 小时前
增加依据。。
服务器·网络·数据库
KKKlucifer3 小时前
数据安全服务的技术深耕与场景适配:行业实践全景解析
网络·安全
头疼的程序员4 小时前
计算机网络:自顶向下方法(第七版)第二章 学习分享(二)
学习·计算机网络
2501_915909064 小时前
设置了 SSL Pinning 与双向 TLS 验证要怎么抓包
网络·网络协议·ios·小程序·uni-app·iphone·ssl
奔袭的算法工程师4 小时前
CRN源码详细解析(2)-- 图像骨干网络之Resnet18
网络·人工智能·深度学习·目标检测·自动驾驶
2502_911679144 小时前
KEYSIGHT是德 N1912A功率计:宽带多通道功率测量的标杆之选
大数据·网络·信息与通信·信号处理