程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

    • 小程序入门级配置

    • 模板与配置

      • WXML 模板语法
      • WXSS 模板语法
      • 全局配置
      • 页面配置
      • 网络数据请求
        • 1. 小程序中网络数据请求的限制
        • 2. 配置 request 合法域名
          • 2.1 配置合法域名的步骤
        • 3. 发起 GET 请求
          • 3.1 使用 wx.request() 发送 GET 请求
        • 4. 发起 POST 请求
          • 4.1 使用 wx.request() 发送 POST 请求
        • 5. 在页面刚加载时请求数据
          • 5.1 页面加载时请求数据的实现
        • 6. 暂时跳过 request 合法域名校验
          • 6.1 在开发者工具中跳过合法域名校验
        • 7. 关于跨域和 Ajax 的说明
    • 视图与逻辑

    • 自定义组件

  • uniapp多端开发

  • 小程序开发
  • 原生微信小程序
  • 模板与配置
scholar
2024-10-18
目录

网络数据请求

# 网络数据请求

在微信小程序开发中,网络请求是最常见的操作之一。无论是从服务器获取数据,还是向服务器提交数据,微信小程序都为开发者提供了非常便捷的 API,如 wx.request() 方法来处理 HTTP 请求。小程序的网络请求有一些独特的限制,了解并掌握这些限制和技巧,可以帮助开发者更好地实现网络通信功能。

# 1. 小程序中网络数据请求的限制

微信小程序的网络请求有以下几个方面的限制,这些限制主要是出于安全考虑:

  • 域名限制:小程序的网络请求只能向已经备案且在微信小程序后台配置过的合法域名发起。这意味着,只有在微信小程序后台配置的域名才能进行数据交互。
  • HTTPS 请求:小程序的网络请求必须使用 HTTPS 协议,这要求所有的服务器都支持 HTTPS,并且证书必须有效。
  • 请求次数限制:微信小程序对并发请求的数量有限制,通常最多允许同时发起 10 个并发请求。
  • 请求数据大小限制:小程序中 GET 请求传输的数据大小是有限制的(最大 2048 字节),而 POST 请求数据的大小限制为 10MB。

这些限制是为了确保小程序的数据交互安全,避免潜在的安全威胁。

下图展示了小程序网络请求的限制:

小程序中网络数据请求的限制

# 2. 配置 request 合法域名

为了确保微信小程序的网络请求是合法且安全的,所有的网络请求必须发送到经过备案的合法域名。因此,在开发过程中,开发者必须在微信小程序的管理后台配置合法域名。

# 2.1 配置合法域名的步骤

  1. 进入微信公众平台:使用小程序开发者账号登录微信公众平台。
  2. 选择小程序:在首页选择你需要配置的微信小程序。
  3. 进入开发设置:点击“开发设置”选项,进入服务器域名配置页面。
  4. 配置服务器域名:在“服务器域名”部分,点击“修改”,添加需要使用的合法域名。所有请求都必须通过这些域名发出。
  5. 保存配置:填写完成后,点击保存。

配置完成后,小程序中的 wx.request() 方法将能够正常访问这些域名上的接口。

注意:开发阶段时可以跳过域名校验,但正式上线时必须配置好合法域名。

下图展示了配置 request 合法域名的界面:

配置 request 合法域名

# 3. 发起 GET 请求

在微信小程序中,使用 wx.request() 方法可以发起 GET 请求。GET 请求是最常见的 HTTP 请求类型,通常用于从服务器获取数据。

# 3.1 使用 wx.request() 发送 GET 请求

以下是一个典型的 GET 请求示例代码:

wx.request({
  url: 'https://example.com/api/data', // 接口地址
  method: 'GET', // 请求方式
  success: function (res) {
    // 请求成功时执行的回调函数
    console.log(res.data); // 输出服务器返回的数据
  },
  fail: function (err) {
    // 请求失败时执行的回调函数
    console.log(err); // 输出错误信息
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
  • url:请求的接口地址,必须是合法的 HTTPS 地址。
  • method:请求方式,这里指定为 GET。
  • success:请求成功时的回调函数,res 包含了服务器返回的响应数据。
  • fail:请求失败时的回调函数,用来处理错误。

注意:微信小程序中的所有网络请求都必须使用 HTTPS 协议,如果服务器不支持 HTTPS,网络请求将无法成功发出。

下图展示了 GET 请求的代码示例:

发起 GET 请求

# 4. 发起 POST 请求

POST 请求通常用于将数据发送到服务器。它与 GET 请求的区别在于,POST 请求会将数据包含在请求的主体(body)中,而不是通过 URL 传递。小程序同样使用 wx.request() 来发起 POST 请求。

# 4.1 使用 wx.request() 发送 POST 请求

以下是一个发起 POST 请求的示例代码:

wx.request({
  url: 'https://example.com/api/submit', // 接口地址
  method: 'POST', // 请求方式
  data: {
    name: 'John',
    age: 30
  }, // 提交的数据
  header: {
    'content-type': 'application/json' // 设置请求头
  },
  success: function (res) {
    console.log(res.data); // 请求成功后输出返回的数据
  },
  fail: function (err) {
    console.log(err); // 请求失败时输出错误信息
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • data:传递给服务器的数据,这里可以是 JSON、表单数据等。它将包含在请求的 body 中。
  • header:可以设置请求的 HTTP 头部信息。常见的头部信息是 content-type,指定传输的数据格式,如 application/json 或 application/x-www-form-urlencoded。
  • success:请求成功时执行的回调函数,res 包含服务器的返回数据。

POST 请求通常用于向服务器发送复杂的数据,如表单数据或 JSON 数据。相比 GET 请求,POST 请求没有数据大小限制,因此适合传输大量数据。

下图展示了 POST 请求的代码示例:

发起 POST 请求

# 5. 在页面刚加载时请求数据

在很多小程序中,页面加载时自动请求数据是一个常见的需求。为了实现这一功能,我们可以在页面的 onLoad 生命周期函数中调用 wx.request() 方法进行数据请求。onLoad 是页面加载时自动执行的生命周期函数,因此可以在此函数中发起网络请求,初始化页面数据。

# 5.1 页面加载时请求数据的实现

以下是一个在页面加载时请求数据的示例代码:

Page({
  onLoad: function () {
    // 页面加载时调用的函数
    this.getData(); // 调用自定义的获取数据函数
  },
  getData: function () {
    // 自定义的函数,用于获取数据
    wx.request({
      url: 'https://example.com/api/data', // 接口地址
      method: 'GET',
      success: function (res) {
        console.log(res.data); // 输出返回的数据
      },
      fail: function (err) {
        console.log(err); // 输出错误信息
      }
    });
  }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  • onLoad:页面加载时触发,该函数会自动调用 getData 函数,发起网络请求。
  • getData:自定义的函数,负责发送 GET 请求获取数据。

这种方式非常常见,适用于需要在页面初始时加载远程数据的场景,例如加载用户的基本信息或初始化列表内容。

下图展示了页面加载时请求数据的代码示例:

页面刚加载时请求数据

# 6. 暂时跳过 request 合法域名校验

在开发阶段,有时我们还没有正式配置好合法域名,但仍然需要测试接口请求。此时可以通过微信开发者工具暂时跳过合法域名的校验。虽然这在开发阶段是允许的,但正式上线时必须配置合法域名。

# 6.1 在开发者工具中跳过合法域名校验

  1. 打开微信开发者工具。
  2. 点击项目设置。
  3. 找到“不校验合法域名、web-view(业务域名)、TLS 版本及 HTTPS”选项,并勾选该选项。

注意:该操作只在开发者工具中有效,且仅用于开发调试阶段。发布上线时,这一功能必须禁用,且需要确保配置了合法的域名。

下图展示了如何跳过合法域名校验:

暂时跳过 request 合法域名校验

# 7. 关于跨域和 Ajax 的说明

微信小程序的网络请求并不受传统浏览器的跨域限制,因为小程序的网络请求是通过微信的安全沙箱进行的。微信小程序中的 wx.request() 方法与浏览器中的 Ajax 功能类似,但不需要担心跨域问题。

  • 跨域问题:在浏览器中,跨域请求是指客户端向与当前页面不同

域名的服务器发出请求,通常会受到浏览器的同源策略限制。而在微信小程序中,由于小程序的网络请求在微信的沙箱内执行,跨域问题并不存在。

  • HTTPS 要求:虽然跨域问题不存在,但小程序要求所有请求必须通过 HTTPS 协议进行,以确保数据传输的安全性。

下图展示了跨域和 Ajax 的说明:

关于跨域和 Ajax 的说明

总结

微信小程序提供了强大的网络请求功能,开发者可以通过 wx.request() 方法实现 GET、POST 等多种请求类型,用于与服务器进行数据交互。在开发过程中,必须确保所有请求的域名已在小程序后台配置,并且使用 HTTPS 协议。通过页面生命周期函数 onLoad,可以在页面加载时自动请求数据,为用户展示动态的内容。在开发阶段,开发者还可以跳过域名校验功能进行调试,但上线时必须配置合法域名。

编辑此页 (opens new window)
上次更新: 2025/01/31, 00:08:39
页面配置
页面导航

← 页面配置 页面导航→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式