微信小程序封装的HTTP请求示例【附升级版】


Posted in Javascript onMay 11, 2019

本文实例讲述了微信小程序封装的HTTP请求。分享给大家供大家参考,具体如下:

微信小程序里自己封装了请求的函数,但几乎每个页面都要用到,所以为什么更方便的调用,再一次进行封装。

在app.js里面定义个全局对象,这样想要用到该函数,只需要在该页面的js文件里面,请求一个app实例。

废话不多说,先上代码:

//全局对象httpClient
httpClient:{
  request:function(method,url,data){
    //返回一个promise实例
    return new Promise( (resolve,reject)=>{
       wx.request({
        url:url,
        data:data,
        mehtod:method,
        success:function(res){
          resolve(res)
        },
        fail:function(res){
          reject(res);
        },
        complete:function(){
          console.log('complete');
        }
      })
    })
  }
  //get方法:用来获取数据
  get:function( url ) {
    return this.request('GET',url);
  },
  //post方法:用来更新数据
  post:function( url,data) {
    resturn this.request('POST',url,data);
  },
  //put方法
  put:function(url,data){
    return this.request('PUT', url, data);
  },
  //delete方法
  delete:function(url,data){
    return this.request('DELETE', url, data);
  }

在需要请求的页面调用:

例如:登录页面login.js

//获取app实例,从而调用全局对象的函数
var app=getApp();
login:function(){
  var url='http:xxxxx/login';
  var data={
    userName:'xxxxx',
    passwd:'xxxxxx'
  }
  app.httpClient.post( url,data )
    .then( res=>{console.log("请求成功时调用该函数")})
    .catch(res=>{console.log("请求失败时调用该函数")})
}
//为了更好的阅读,也可以将回调函数,定义在外面
//这样
loginSuccess:function(){
  console.log("请求成功时调用该函数")
},
loginFail:function(){
  console.log("请求失败时调用该函数")
},
login:function(){
  var self=this;
  var url='http:xxxxx/login';
  var data={
    userName:'xxxxx',
    passwd:'xxxxxx'
  }
  app.httpClient.post( url,data )
    .then( res=>self.loginSuccess())
    .catch(res=>self.loginFail())
}

是不是简洁多了。。。。

附:升级版

上代码

// 该函数怎么写,需要跟后端人员协商返回的格式
function getErrorMsgByErrorNo(error_no) {
 let error_msg;
 switch (error_no) {
  case 100: error_msg = '操作失败,请稍后再试!'; break;
  default: error_msg = '网络错误,请稍后再试!'; break;
 }
 return error_msg;
}
function handleData(res) {
 if (res.data.success) {
  if (typeof (res.data.body) === 'string') {
   return [];
  } else if (Array.isArray(res.data.body) === false) {
   const _arr = [];
   _arr.push(res.data.body);
   return _arr;
  } else {
   return res.data.body;
  }
 } else {
  if (res.data.error_no) {
   return {
    error_no: res.data.error_no,
    error_msg: getErrorMsgByErrorNo(res.data.error_no)
   };
  } else {
   return {
    error_no: 123456,
    error_msg: '服务器维护中,请稍后!'
   };
  }
 }
}
const httpClient = {
 request: function (method, url, data) {
  return new Promise((resolve, reject) => {
   wx.request({
    url: url,
    data: data,
    method: method,
    success: function (res) {
     resolve(handleData(res))
    },
    fail: function (err) {
     console.log('request fail ', err);
     resolve({
      error_no: 100,
      error_msg: getErrorMsgByErrorNo(100)
     })
    },
    complete: function (res) {
     console.log("request completed!");
    }
   })
  });
 },
 get: function (url) {
  return this.request('GET', url);
 },
 post: function (url, data) {
  return this.request('POST', url, data);
 },
 put: function (url, data) {
  return this.request('PUT', url, data);
 },
 delete: function (url, data) {
  return this.request('DELETE', url, data);
 },
};
module.exports = httpClient;

使用

function getMyselfData() {
 const _Url= urls.url;
 return httpClient.get(_Url);
}
 getData() {
  let resultsData = this.getMyselfData();
  resultsData.then((res) => {
   if (res.error_no) {
   // 只要有error_no就说明请求出现了错误
    this.toast.showToast({
     type: 'fail',
     title: res.error_msg,
    })
   } else {
    this.setData({
     journeyList: res.data
    })
   }
  });
 },

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
Javascript里使用Dom操作Xml
Sep 20 Javascript
javascript css styleFloat和cssFloat
Mar 15 Javascript
JavaScript开发规范要求(规范化代码)
Aug 16 Javascript
Jquery方式获取iframe页面中的 Dom元素
May 07 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
React 组件间的通信示例
Jun 14 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
解决$store.getters调用不执行的问题
Nov 08 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 #Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 #jQuery
JS实现获取当前所在周的周六、周日示例分析
May 11 #Javascript
js核心基础之构造函数constructor用法实例分析
May 11 #Javascript
js核心基础之闭包的应用实例分析
May 11 #Javascript
vue下载excel的实现代码后台用post方法
May 10 #Javascript
微信小程序如何再次获取用户授权的方法
May 10 #Javascript
You might like
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
深入理解PHP中的Session和Cookie
2013/06/21 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python中__call__方法示例分析
2014/10/11 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
《夏夜多美》教学反思
2014/02/17 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
利用python做数据拟合详情
2021/11/17 Python