微信小程序-wx.request获取数据

本文介绍如何在微信小程序中正确使用API进行前后端数据交互,并提供了解决异步请求顺序问题的方法。

这个是小程序官方API给的参数,详细请参考官方API

这里写图片描述

这里写图片描述

看了API之后,就举个栗子吧,一般普通的请求接口是这样,如下:

js代码

Page({
  data:{
    // text:"这是一个页面"
    result: []
  },

  onLoad:function() {
      var that = this; 
      wx.request({
          url: '这里放后台请求的接口地址',
          method: 'POST',           //注意method一定要大写
          //post请求 "Content-Type": "application/x-www-form-urlencoded"  post上传数据要string类型,所以需要转化;
          //get请求 默认"Content-Type": application/json
          header: {
              "Content-Type": "application/x-www-form-urlencoded"  // post
          },                       
          success:function(res) {
              //请求数据成功的回调函数
          }
          complete: function (res) {
              //请求完成的回调函数
          },
      })
  }
})

Bug & Tip

1.tip: content-type 默认为 ‘application/json’;
2.tip: url 中不能有端口;
3.bug: 开发者工具 0.10.102800 版本,header 的 content-type 设置异常;


当我在用一般情况的request调用数据时,遇到了一种状况;

一个页面需要调用多个接口时,而且第二个接口要用第一个接口返回的数据,有时候就会出问题;

因为wx.request方法都是异步的,而且不支持同步,所以当我们调用第二个接口时,可能第一个接口还没有返回成功,所以就会出现报错,

所以根据这个问题,需要让wx.request顺序执行就可以了;

方法如下:

我在一个util.js写下如下方法:

var Promise = require('es6Promise.min.js')  //我用了es6Promise.js

function wxPromisify(fn) {  
  return function (obj = {}) {    
    return new Promise((resolve, reject) => {      
      obj.success = function (res) {        
        resolve(res)      
      }      

      obj.fail = function (res) {        
        reject(res)      
      }      

      fn(obj)    
    })  
  }
}

module.exports = {  
  wxPromisify: wxPromisify
}

使用方法如下:

var util = require('../utils/util');

var wxRequest = util.wxPromisify(wx.request)

wxRequest({
  url: 'https://...........'
}).then(function (res) {
  // 处理第一个请求结果...
}).then(function () {
  return wxRequest({
    url: 'https://...........'
  })
}).then(function (res) {
  // 处理第二个请求的结果...
})
### 微信小程序 `wx.request` 报错解决方案 在开发微信小程序时,`wx.request` 的报错可能由多种原因引起。以下是常见的几种情况及其对应的解决方案: #### 1. **并发数限制** 当使用 `wx.request` 进行大量并发请求时,可能会遇到最大并发数超过 10 导致的错误。可以通过引入队列机制来解决此问题。推荐使用工具库如 `wx-queue-request.js` 来管理请求队列[^1]。 ```javascript // 使用 wx-queue-request.js 管理请求队列 const QueueRequest = require('wx-queue-request'); let queueRequest = new QueueRequest(); function sendRequest(url, data) { return queueRequest.request({ url: url, method: 'POST', data: data }); } ``` #### 2. **HTTPS 配置问题** 如果 `wx.request` 返回 `fail ssl hand shake error` 错误,则可能是由于 HTTPS 证书配置不当引起的。通常情况下,这是由于缺少中间证书所致。建议联系服务器管理员更新完整的 SSL 证书链,并验证其有效性[^3][^4]。 #### 3. **请求 URL 或端口问题** 某些特定端口号(例如 8443)可能导致无法访问的情况。应确保使用的端口号为标准 HTTPS 端口 443,并移除 URL 中多余的端口号设置[^2]。 ```javascript // 正确的 URL 示例 const url = 'https://example.com/api'; // 不含端口号 ``` #### 4. **请求方法大小写敏感** 虽然大多数开发者已经习惯于将 HTTP 方法设为大写字母形式(如 GET、POST),但在少数场景下仍可能出现因大小写不一致引发的问题。因此,在定义 `method` 参数时务必保持一致性[^2]。 ```javascript wx.request({ url: 'https://example.com/data', method: 'GET', // 大写 success(res) { console.log(res); }, fail(err) { console.error(err); } }); ``` #### 5. **网络环境异常** 部分用户的设备可能存在特殊的网络状况(如代理设置或防火墙拦截)。这种情况下即使代码逻辑无误也可能触发失败回调。可尝试通过调试工具捕获更详细的错误日志以便定位根本原因。 --- ### 总结 针对以上提到的各种可能性逐一排查即可有效减少甚至完全消除 `wx.request` 出现的各类错误提示信息。同时为了提高程序健壮性和用户体验度还可以考虑加入全局错误处理以及超时重试等功能模块设计思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值