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


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 相关文章推荐
JS弹出对话框返回值代码(asp.net后台)
Dec 28 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
JQuery插入DOM节点的方法
Jun 11 Javascript
JQuery中ajax方法访问web服务实例
Jul 18 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
Jul 18 Javascript
DropDownList控件绑定数据源的三种方法
Dec 24 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
js转换对象为xml
Feb 17 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
Dec 31 Javascript
Vue不能检测到Object/Array更新的情况的解决
Jun 26 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中设置session用memcache来存储的方法总结
2016/01/14 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
Javascript Worker子线程代码实例
2020/02/20 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
python递归法解决棋盘分割问题
2019/07/17 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
求职信怎么写范文
2014/05/26 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
婚庆公司开业主持词
2015/06/30 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
Pandas 数据编码的十种方法
2022/04/20 Python
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers