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


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+Flash实现访问剪切板操作
Nov 20 Javascript
了不起的node.js读书笔记之mongodb数据库交互
Dec 22 Javascript
浅析Javascript中“==”与“===”的区别
Dec 23 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
基于vue.js实现图片轮播效果
Dec 01 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
vue-cli构建项目使用 less的方法
Oct 04 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
Dec 19 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 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中防止SQL注入实现代码
2011/02/19 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php面向对象重点知识分享
2019/09/27 PHP
JQuery jsonp 使用示例代码
2009/08/12 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
puppeteer库入门初探
2019/01/09 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
法人授权委托书
2014/09/16 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis