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


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 相关文章推荐
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
Jun 21 Javascript
JavaScript 放大镜 移动镜片效果代码
May 09 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
js验证上传图片的方法
May 12 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
Jquery元素追加和删除的实现方法
May 24 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
jQuery.validate.js表单验证插件的使用代码详解
Oct 22 jQuery
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
JS数组方法shift()、unshift()用法实例分析
Jan 18 Javascript
解决vue+elementui项目打包后样式变化问题
Aug 03 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
星际争霸秘籍
2020/03/04 星际争霸
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
js右键菜单效果代码
2007/07/21 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
微信小程序实现人脸检测功能
2018/05/25 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python3简单实现微信爬虫
2015/04/09 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
python获取整个网页源码的方法
2020/08/03 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
爱护草坪标语
2014/06/24 职场文书
代理人委托书
2014/08/01 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
简爱电影观后感
2015/06/10 职场文书
反邪教观后感
2015/06/11 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
大学生活感想
2015/08/10 职场文书
导游词之淮安明祖陵
2019/11/25 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL