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


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 相关文章推荐
jquery模拟按下回车实现代码
Sep 20 Javascript
DOM 中的事件处理介绍
Jan 18 Javascript
javascript实现数独解法
Mar 14 Javascript
js实现缓冲运动效果的方法
Apr 10 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
简介JavaScript中substring()方法的使用
Jun 06 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
Angular.Js的自动化测试详解
Dec 09 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
May 13 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
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
JS继承 笔记
2011/07/13 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
jquery插件treegrid树状表格的使用方法详解(.Net平台)
2017/01/03 Javascript
如何解决vue与传统jquery插件冲突
2017/03/20 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
个人自我评价范文
2014/02/05 职场文书
自动一体化专业求职信
2014/03/15 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书