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


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 相关文章推荐
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
Jan 07 Javascript
Javascript 面向对象 命名空间
May 13 Javascript
Js组件的一些写法
Sep 10 Javascript
javascript中有趣的反柯里化深入分析
Dec 05 Javascript
js实现从中间开始往上下展开网页窗口的方法
Mar 02 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
js微信分享API
Oct 11 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
JavaScript原型继承_动力节点Java学院整理
Jun 30 Javascript
node thread.sleep实现示例
Jun 20 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
Sep 26 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
判断脚本加载是否完成的方法
2009/05/26 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
js密码强度检测
2016/01/07 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python使用gensim计算文档相似性
2016/04/10 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
减负增效提质方案
2014/05/23 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
校园广播稿精选
2014/10/01 职场文书
毕业实习计划书
2015/01/16 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
2016新春团拜会致辞
2015/08/01 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
MySQL系列之四 SQL语法
2021/07/02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL