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

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

写在最后:

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

相关推荐
一隅论数智16 小时前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi201617 小时前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
前端小万17 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
虎头金猫17 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
爱吃苹果的日记本17 小时前
离散数学第六课
学习·离散数学
AI职业加油站18 小时前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光19 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊19 小时前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
wuyk55519 小时前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网