微信小程序封装的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 相关文章推荐
javascript 写类方式之十
Jul 05 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
AngularJS实现动态切换样式的方法分析
Jun 26 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
Oct 12 Javascript
推荐15个最好用的JavaScript代码压缩工具
Feb 13 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
Jun 19 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
Oct 16 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
Jun 19 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 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 日期时间函数的高级应用技巧
2009/10/10 PHP
php 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
Mac下安装vue
2018/04/11 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
基于Python的接口测试框架实例
2016/11/04 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
python实现简单学生信息管理系统
2020/04/09 Python
python re的findall和finditer的区别详解
2020/11/15 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
大班上学期幼儿评语
2014/04/30 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
社会工作专业求职信
2014/07/15 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
清明节主题班会
2015/08/14 职场文书