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


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 工具函数学习资料
Apr 29 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
原生Js实现元素渐隐/渐现(原理为修改元素的css透明度)
Jun 24 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
Aug 13 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
Jun 27 Javascript
jQuery实现根据滚动条位置加载相应内容功能
Jul 18 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
React Native使用fetch实现图片上传的示例代码
Mar 07 Javascript
Node.js连接Sql Server 2008及数据层封装详解
Aug 27 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
vue项目实现分页效果
Mar 24 Vue.js
微信小程序 列表的上拉加载和下拉刷新的实现
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写的serv-u的web申请账号的程序
2006/10/09 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php使用正则验证中文
2016/04/06 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jQuery常用且重要方法汇总
2015/07/13 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript实现三级级联特效
2017/11/05 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
element上传组件循环引用及简单时间倒计时的实现
2018/10/01 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
es6 for循环中let和var区别详解
2020/01/12 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
详细介绍Python函数中的默认参数
2015/03/30 Python
python机器学习之随机森林(七)
2018/03/26 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
Python 字符串与数字输出方法
2018/07/16 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
Python实现Restful API的例子
2019/08/31 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
杭州时比特电子有限公司SQL
2013/08/22 面试题
电气工程师岗位职责
2014/01/01 职场文书