微信小程序网络请求的封装与填坑之路


Posted in Javascript onApril 01, 2017

以前写过一篇关于微信小程序上拉加载,上拉刷新的文章,今天写的是关于小程序网络请求的封装。

在这里首先声明一个小程序文档的bug,导致大伙们在请求的时候,服务器收到不到参数的问题

示例代码:

wx.request({
 url: 'test.php', //仅为示例,并非真实的接口地址
 data: {
 x: '' ,
 y: ''
 },
 header: {
 'Content-Type': 'application/json'
 },
 success: function(res) {
 console.log(res.data)
 }
})

其中header 中的Content-Type,应该用小写content-type才能让服务器收到参数。让我折腾的好久,改了服务器仍然不行,原来是这个问题。参数在request payload中,服务器不能收到,使用如下转换之后

function json2Form(json) { 
 var str = []; 
 for(var p in json){ 
 str.push(encodeURIComponent(p) + "=" + encodeURIComponent(json[p])); 
 } 
 return str.join("&"); 
}

微信小程序网络请求的封装与填坑之路

最终还是认为是content-type的问题。最后改小写就ok,觉得微信这么牛逼的团队,犯了一个很低级 的错误,把我开发者折腾的爬了。不说,上代码吧。

1 、Http请求的类

import util from 'util.js';
/**
 * url 请求地址
 * success 成功的回调
 * fail 失败的回调
 */
function _get( url, success, fail ) {

 console.log( "------start---_get----" );
 wx.request( {
 url: url,
 header: {
  // 'Content-Type': 'application/json'
 },
 success: function( res ) {
  success( res );
 },
 fail: function( res ) {
  fail( res );
 }
 });
 console.log( "----end-----_get----" );
}
/**
 * url 请求地址
 * success 成功的回调
 * fail 失败的回调
 */
function _post_from(url,data, success, fail ) {
 console.log( "----_post--start-------" );
 wx.request( {
 url: url,
 header: {
  'content-type': 'application/x-www-form-urlencoded',
 },
 method:'POST',
 data:{data: data},
 success: function( res ) {
  success( res );
 },
 fail: function( res ) {
  fail( res );
 }
 });
 console.log( "----end-----_get----" );
}

 /**
 * url 请求地址
 * success 成功的回调
 * fail 失败的回调
 */
function _post_json(url,data, success, fail ) {
 console.log( "----_post--start-------" );
 wx.request( {
 url: url,
 header: {
  'content-type': 'application/json',
 },
 method:'POST',
 data:data,
 success: function( res ) {
  success( res );
 },
 fail: function( res ) {
  fail( res );
 }
 });
 console.log( "----end----_post-----" );
}
module.exports = {
 _get: _get,
 _post:_post,
 _post_json:_post_json
}

2、测试用例

2.1 get请求

//GET方式
 let map = new Map();
 map.set( 'receiveId', '0010000022464' );
 let d = json_util.mapToJson( util.tokenAndKo( map ) );
 console.log( d );
 var url1 = api.getBaseUrl() + 'SearchTaskByReceiveId?data='+d;
 network_util._get( url1,d,
 function( res ) {
 console.log( res );
 that.setData({
  taskEntrys:res.data.taskEntrys
 });
 }, function( res ) {
 console.log( res );
 });

2.2 POST请求

//Post方式
 let map = new Map();
 map.set( 'receiveId', '0010000022464' );
 let d = json_util.mapToJson( util.tokenAndKo( map ) );
 console.log( d );
 var url1 = api.getBaseUrl() + 'SearchTaskByReceiveId';
 network_util._post( url1,d,
 function( res ) {
 console.log( res );
 that.setData({
  taskEntrys:res.data.taskEntrys
 });
 }, function( res ) {
 console.log( res );
 });

微信小程序网络请求的封装与填坑之路

效果

微信小程序网络请求的封装与填坑之路

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
Javascript 键盘keyCode键码值表
Dec 24 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
Apr 22 Javascript
JS实现的网页倒计时数字时钟效果
Mar 02 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
jQuery实现伪分页的方法分享
Feb 17 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
Aug 11 Javascript
JS中substring与substr的用法
Nov 16 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
Apr 01 #Javascript
Node.js之网络通讯模块实现浅析
Apr 01 #Javascript
vue-cli+webpack记事本项目创建
Apr 01 #Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 #Javascript
Vue.js实战之Vuex的入门教程
Apr 01 #Javascript
AngularJS页面传参的5种方式
Apr 01 #Javascript
vue2.0构建单页应用最佳实战
Apr 01 #Javascript
You might like
做个自己站内搜索引擎
2006/10/09 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
php常用数组函数实例小结
2016/12/29 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
JavaScript 学习点滴记录
2009/04/24 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
javascript如何写热点图
2015/12/08 Javascript
jQuery添加options点击事件并传值实例代码
2016/05/18 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
Python中的__slots__示例详解
2017/07/06 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Pycharm修改python路径过程图解
2020/05/22 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
十八大标语口号
2014/10/09 职场文书
琅琊山导游词
2015/02/05 职场文书
六一活动主持词
2015/06/30 职场文书
MySQL Router的安装部署
2021/04/24 MySQL