微信小程序网络请求封装

微信小程序 --- wx.request网络请求封装 为了方便统一处理请求参数以及服务器响应结果,为WxRequest添加拦截器功能,拦截器包括请求拦截器和响应拦截器请求拦截器本质上是在请求之前调用的函数,用来对请求参数进行新增和修改响应拦截器本质上是在响应之后调用的函数,用来对响应数据做点什么注意:不管成功响应还是失败响应,都会执行响应拦截器// 请求拦截器// 在发送请求之前做些什么// 响应拦截器// 对响应数据做点什么通过使用方式,我们可以得出结论:可以在WxRequest类内部定义实例属性,属性中需要包含request以及。 阅读详情

解决什么问题

  • 微信小程序请求 Restful api的封装
  • 微信小程序请求 SOUP 协议格式数据的封装

什么Restful apiapi,什么是SOUP 协议请自行搜索。废话不多说,直接上代码(talk is cheap ,show the code)。

微信请求 Restful api 的封装


/**
 * 描叙:网络请求 可以解析 Restful api
 * 参数说明 :
 * @requestType: 默认GET 请求方式 OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT  (String 类型)
 * @url: 请求地址。eg: https://domian.com?param_name=param_value  (String 类型)
 * @params: 请求参数 (json格式)
 * @onSuccess: 成功回调,是一个函数
 * @onFail:  失败回调,是一个函数
 * @retry: 请求失败后,重新请求次数为 retry-1(默认1次,即只进行一次请求) 整型
 */
function http(requestType, url, params, onSuccess, onFail, onComplete, retry) {

    var requestType = arguments[0] ? arguments[0] : 'GET';
    var url = arguments[1] ? arguments[1] : '';
    var params = arguments[2] ? arguments[2] : {};
    var onSuccess = arguments[3] ? arguments[3] : defaultCallback;
    var onFail = arguments[4] ? arguments[4] : defaultCallback;
    var onComplete = arguments[5] ? arguments[5] : defaultCallback;
    var retry = arguments[6] ? arguments[6] : 1;

    wx.request({
        url: url,
        method: requestType,
        data: params,
        header: {
            'content-type': requestType == 'POST' ?
                'application/x-www-form-urlencoded' : 'application/json'
        },
        success: function (res) {
            //请求正常返回,则则解析数据
            if (res.statusCode === 200) {
                onSuccess(res.data);
            } else {//如果返回错误,直接打印错误信息           
                defaultConsole("错误码:" + res.statusCode + "\n\t" + "  错误信息:" + res.data);
            }

        },
        fail: function (error) {
            onFail(error);
            // 重试机制
            retry--;
            if (retry > 0) {
                return http(requestType, url, params, onSuccess, onFail, onComplete, retry);
            }
        },
        complete: function (res) {
            onComplete(res);
        }
    });
}



/**
 * 默认回调
 */
function defaultCallback(data) {
    console.log(data);
}

/**
 * 默认打印数据
 */
function defaultConsole(data) {
    console.log("--------------------------我是错误分割线--------------------------")
    console.log(data);
    console.log("--------------------------我是错误分割线--------------------------")
}


/** 导出模块 */
module.exports = {
    http
}

微信请求 SOUP 协议格式数据的封装

新建一个文件http-soup.js;


/**SOUP 协议格式 固定不变的常量*/
const SOUP_FORMAT_TOP = '<?xml version="1.0" encoding="utf-8"?>';
const SOUP_FORMAT_ENVELOPE_START = '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
const SOUP_FORMAT_BODY_START = '<soap:Body>';
const SOUP_FORMAT_BODY_END = '</soap:Body>';
const SOUP_FORMAT_ENVELOPE_END = '</soap:Envelope>';

/**
 * 描叙:网络请求 可以解析 SOUP协议 api 
 * 参数说明:
 * @requestType 请求方式,建议默认使用POST  
 * @url 请求url , 如:https://sqlb.mynatapp.cc/weixin.asmx?op=dzLogin  String类型
 * @soupAction 请求头SOAPAction值  String类型
 * @requestBody 请求体  XML格式字符串
 * @onSuccess 请求成功回调    函数类型
 * @onFail  请求失败回调      函数类型
 * @onComplete 请求完成回调   函数类型
 */
function soup(requestType, url, soupAction, requestBody, onSuccess, onFail, onComplete) {

    var requestType = arguments[0] ? arguments[0] : 'POST';
    var url = arguments[1] ? arguments[1] : '';
    var soupAction = arguments[2] ? arguments[2] : '';
    var requestBody = arguments[3] ? arguments[3] : '';
    var onSuccess = arguments[4] ? arguments[4] : defaultCallback;
    var onFail = arguments[5] ? arguments[5] : defaultCallback;
    var onComplete = arguments[6] ? arguments[6] : defaultCallback;

    var tempData = SOUP_FORMAT_TOP + SOUP_FORMAT_ENVELOPE_START + SOUP_FORMAT_BODY_START
        + requestBody
        + SOUP_FORMAT_BODY_END + SOUP_FORMAT_ENVELOPE_END;

    wx.request({
        url: url,
        data: tempData,
        method: requestType,
        header: {
            'content-type': 'text/xml; charset=utf-8',
            'SOAPAction': soupAction,
        },
        // 设置请求的 header
        success: function (res) {
            //请求正常返回,则则解析数据
            if (res.statusCode === 200) {
                var tempReturnData = dealWithData(res.data);
                //转换为JSON对象
                var jsonData = JSON.parse(tempReturnData);
                onSuccess(jsonData);
            } else {//如果返回错误,直接打印错误信息           
                defaultConsole("错误码:" + res.statusCode + "\n\t" + "  错误信息:" + res.data);
            }
        },
        fail: function (error) {
            onFail(error);
        },
        complete: function (res) {
            onComplete(res);
        }
    });
};

var Parser = require('../lib/dom-parser.js');

/** 
 * 解析soup数据
 * @data 
 */
function dealWithData(data) {
    //DOM解析对象
    var parser = new Parser.DOMParser();
    //根据soup格式数据生成DOM节点
    var xmlDoc = parser.parseFromString(data, "text/xml");  

    //开始解析 获取soap:Body节点数据
    var soapBody = xmlDoc.getElementsByTagName('soap:Body')[0];
    //获取soap:Body节点所有的子节点
    var childs = soapBody.childNodes;
    //获取soap:Body节点子节点的个数
    var lenght = soapBody.childNodes.length;

    for (var i = 0; i < lenght; i++) {
        //此处排查根据后端返回的规范做的判断
        //返回值中是否包含有Response节点
        if (childs[i].nodeName.indexOf('Response') >= 0) {

            var grandChildren = childs[i].childNodes;
            for (var j = 0; j < grandChildren.length; j++) {
                //返回值中是否包含有Result节点
                if (grandChildren[j].nodeName.indexOf('Result') >= 0) {
                    //找到结果返回
                    return grandChildren[j].childNodes[0].nodeValue;
                }
            }
        }
    }

    //没有找到结果返回‘’
    return '';
}

/**
 * 默认回调
 */
function defaultCallback(data) {
    console.log(data);
}

/**
 * 默认打印数据
 */
function defaultConsole(data) {
    console.log("--------------------------我是错误分割线--------------------------")
    console.log(data);
    console.log("--------------------------我是错误分割线--------------------------")
}

/** 导出模块 */
module.exports = {
    soup
}

使用方法:

    //导入http-soup包
    var soupBuilder = require('../../../utils/http-soup.js');

    //成功回调
    onSuccess: function (data) {
        console.log(data);
        console.log(data[0].dzrefcode);
    },

    // 获取soap格式数据
    getHttpdata: function () {
        var that = this;

        var requestBody = '<dzLogin xmlns="lib">'
            + ' <yhm>' + '123' + '</yhm>'
            + '<mm>' + '123' + '</mm>'
            + '<checkcol>' + 'barcode' + '</checkcol>'
            + '<openid> ' + 'oK1xqv1H0Q503Uk7R2QuEZ8k-H1w' + '</openid>'
            + '</dzLogin>';

        soupBuilder.soup('POST', 'https://sqlb.mynatapp.cc/weixin.asmx?op=dzLogin', 'lib/dzLogin', requestBody, that.onSuccess);
    },

另外有几个辅助js,如下脚本文件在这里:https://github.com/jindw/xmldom


新建一个lib文件夹,将 dom.js、dom-parser.js、sax.js、entities.js 拷贝到里面(lib文件夹与pages、utils平级)

如果有一点点懵逼的话,建议看看没有封装 soup请求 的先,了解下过程。

参考Axios封装微信小程序网络请求实用插件 在使用微信小程序进行开发时,网络请求是一个常见的功能,它允许小程序与服务器进行数据交换。微信小程序提供了wx.request方法来进行网络请求。因此我们通常需要封装类似axios这样的请求组件来统一解决各种数据交互场景。 阅读详情

相关推荐

微信小程序封装:网络请求、提示框、加载框

本文还有配套的精品资源,点击获取 简介:微信小程序网络请求封装实现使用Promise和async/await,提高代码可读性和易维护性。通过封装wx.request()、wx.showToast()和wx.showLoading()方法,简化了异步网络调用和UI交互。TypeScript的引入为函数提供了强类型支持,进一步增强代码质量和错误检测。封装后的API可以便捷地集成...

weixin_36178216的博客 1913

微信小程序开发--网络请求封装

其中 url: 为请求的后台接口地址;data: 为请求接口需要携带的参数;header:设置请求的 header,content-type 默认为 application/json,success: 为请求成功后的回调,res包含请求成功后返回的数据。更多关于 wx.request的用法可以查看官方介绍。RequestTask | 微信开放文档那既然官方已经提供有api,为什么还需要进行二次封装呢?

shi450561200的博客 1878

小程序与springboot后台通信

微信小程序发送Http请求到springboot后台的打包代码,该资源为个人学习记录之用

详解微信小程序网络请求接口封装

为实现定制要求和方便调用,对微信小程序的网络请求接口进行了封装 在根目录新建api文件夹并新建httpRequest.js与config.js文件 1.设置请求域名 // 设置请求域名 let ENV = __wxConfig.envVersion let httpUrl = '', if (ENV == 'develop') { // 测试版开发环境域名 httpUrl = 'https://*******.com/api'; } else if (ENV == 'trial') { // /

风口浪尖的猪吖 1635

ZYNQ程序固化实战:从BOOT.bin生成到QSPI/SD卡双启动模式详解

本文详细解析了ZYNQ 7000系列程序固化的完整流程,重点解决了程序断电丢失问题。通过实战演示,从生成BOOT.bin文件到配置QSPI与SD卡双启动模式,逐步指导开发者实现程序在外部存储中的永久驻留,确保产品脱离调试器独立运行。

weixin_29193259的博客 517

S参数反演法

等效介质理论模型— 利用S参数反演法提取超材料结构的等效参数 等效介质理论模型—利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程。本文对等效介质理论模型进行了详细介绍,并提供对应代码。 超材料的传输矩阵 超材料结构的传输矩阵函数为: 其中,d 为等效光学活性材料的厚度,n 为折射率,Z 表示阻抗。 S参数和传输矩阵T 超材料结构的S参数和传输矩阵T满足下列方程: 利用以上两式,可以得到等效折射率n和相对阻抗的表达式

weixin_43962864的博客 1万+

微信小程序封装请求

导语:微信小程序作为一种轻量级的应用开发框架,已经成为许多开发者的首选。在小程序开发中,网络请求是常见的需求之一。为了提高代码的复用性和开发效率,我们可以封装网络请求,使其更加易用和灵活。本文将介绍如何在微信小程序中封装请求,让开发变得更加便捷。

咕噜咕噜wy的博客 2283

ABAP BOM展开避坑指南:CS_BOM_EXPL_MAT_V2函数参数配置详解

本文深入解析了SAP ABAP开发中用于物料清单展开的核心函数CS_BOM_EXPL_MAT_V2。针对其复杂的参数配置,如CAPID、STLAN、DATUV和MEHRS,提供了详细的避坑指南和最佳实践,帮助开发者避免数据错误与性能陷阱,实现高效、准确的BOM多层展开。

pea55的博客 855

微信小程序-网络请求和封装

微信小程序的网络请求功能是实现数据交互的基础,而合理的封装可以让代码更加优雅、高效。

qq_65834473的博客 2512

RK3588零拷贝视频流水线实战:用GStreamer+Mpp实现8K硬解与DRM显示

本文深入探讨了在RK3588平台上构建零拷贝视频流水线的工程实践。通过结合GStreamer与MPP,实现了从8K视频硬解到DRM显示的全流程硬件加速,有效解决了高分辨率视频处理中的DDR带宽瓶颈问题。文章详细解析了dma-buf数据流机制、管道构建与性能优化策略,为多路视频并发处理提供了高效的系统架构解决方案。

github5actions的博客 1169

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 389

微信小程序-对网络请求的封装

微信小程序-对网络请求的封装 /* * A JavaScript Of The WeChat Miniprogram For The Network Request * See https://www.jianshu.com/p/2e80c96ce712.html for details. * * author: cxr * * */ /** *@header...

qq_41943936的博客 457

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

对微信小程序网络请求框架的再次封装

微信小程序的网络请求框架已经设计得很简单易用了,它是这样发起网络请求的: wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: '' }, header: { 'content-type': 'application/json' // 默认值 }, success (re...

shving的专栏 938

Vue2 - 最新详细实现接入天地图详细配置流程及示例代码教程,提供获取用户当前定位的城市名称及省市区数据、精准经纬度信息、IP属地定位、地图搜索标点等示例,解决天地图跨域报错/页面白屏/定位不准问题

vue2,nuxt2,天地图,使用教程,vue接入国家天地图,定位api,ip属地定位,获取用户当前位置数据,省市区,地图不显示,白屏,报错,vue2如何使用天地图,地图选点,cors跨域,白名单设置了还是不行,vue项目调用天地图api实现定位,Vue2中使用天地图,详细教程,天地图申请密钥key教程,经纬度,经纬度不准确,一直定位北京,定位在北京不准怎么办,nuxt项目天地图,网站,网页,h5页面,地图显示不全,获取当前定位,如何使用天地图,拿到客户ip地址定位城市名称,距离计算,实时搜索地址逆解析,天

🏆 前端领域优质创作者 5327

8年ES运维经验整理出的Elasticsearch运维手册(超实用)

k1 : 控制非线性词频率归一化(饱和),Elasticsearch中默认值为1.2。用人能看懂的话说就是词语在文档中出现的次数对于得分的重要性。例如说我觉得在某些场景,一个搜索词在文档中出现越多则越接近我希望搜索的内容,就可以将这个参数调大一点。b :控制文档长度对于分数的惩罚力度。变量b处于分母上,它乘以刚刚讨论过的字段长度的比值,Elasticsearch中的b 默认值为0.75。如果b较大,则文档长度相对于平均长度的影响更大。

yonggeit的博客 5275

微信小程序—封装网络请求

微信小程序—封装网络请求 作者:邱名涛 撰写时间:2020 年2 月13日 // 封装路径request/index.js //封装微信网络请求 export const request=(params)=>{ //调用函数里面的参数 return new Promise((resolve,reject)=>{ //resolve代表成功函数 ...

Q_MingTao 330

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

微信小程序网络请求封装03

话不多说,微信已经提供了网络请求的API,在实际项目开发中,为了好使,一般都会做网络请求封装啥的。 写撸一个名字叫httputils.js 1.请求头少不了 /** * 请求头 */ var header = { 'content-type': 'application/x-www-form-urlencoded', 'Authorization': "Bearer " ...

qq_41930952的博客 359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

微信小程序网络请求二次封装

在微信小程序中,网络请求操作是非常频繁的,这样导致重复的代码太多了,防止浪费一些不必要的时间,所以,在项目搭建之初,请封装好一切可以封装的代码。

zxcvb0825的博客 799

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

微信小程序-网络请求封装

一、我使用两个js文件封装网络请求: net.config.js用于配置服务器地址和接口地址 netUtil.js用于封装网络请求方法 二、这两个文件都放置于utils目录下 三、在对应页面的.js文件最上方导入使用 import config from '../../utils/net.config.js'; import netUtil from '../../utils/n...

我可能是个Siri 372

微信小程序开发之——网络请求封装

一 概述 网络请求地址放到url.js中,分别制定开发环境,体验环境,线上环境 网络请求的方法放到request.js中,暴露get、post、upload方法 请求前显示加载中,请求结束后隐藏加载中 请求的接口方法,放到api.js中,并调用request.js中对应的方法 二 请求方法封装 2.1 请求地址(url.js) module.exports = { //开发环境 develop: { BASE_URL: "http://localhost:3000/", //本地

我的博客 1111

微信小程序(uniapp)网络请求:从基础到封装

本文系统讲解了uniapp中微信小程序网络请求的完整实现方案,从基础API使用到高级封装技巧,覆盖了实际开发中的核心需求。通过合理的封装和错误处理,可以显著提升代码可维护性和用户体验。

Rocky_Time的博客 2136

php网站封装成微信小程序,微信小程序中网络请求的简单封装

这篇文章主要介绍了微信小程序之网络请求简单封装实例详解的相关资料,需要的朋友可以参考下微信小程序之网络请求简单封装实例详解在微信小程序中实现网络请求相对于Android来说感觉简单很多,我们只需要使用其提供的API就可以解决网络请求问题。普通HTTPS请求(wx.request)上传文件(wx.uploadFile)下载文件(wx.downloadFile)WebSocket通信(wx.conne...

weixin_33719097的博客 198

微信小程序-网络请求与封装

微信小程序-网络请求与封装。

qq_48104836的博客 242
上一篇: 微信小程序请求SOAP协议格式的数据并解析Dom节点
下一篇: 微信小程序 本地资源图片无法通过 WXSS 获取,可以使用网络图片,或者 base64,或者使用image标签。
She_lock
博客等级 码龄12年 157粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值