微信小程序封装的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 相关文章推荐
jquery dialog键盘事件代码
Aug 01 Javascript
读jQuery之十一 添加事件核心方法
Jul 31 Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
extjs render 用法介绍
Sep 11 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
JavaScript对IE操作的经典代码(推荐)
Mar 10 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
Aug 29 jQuery
vue中过滤器filter的讲解
Jan 21 Javascript
JS中队列和双端队列实现及应用详解
Sep 29 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
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
php牛逼的面试题分享
2013/01/18 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JavaScript日历实现代码
2010/09/12 Javascript
js 浏览器事件介绍
2012/03/30 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
js实现网页随机验证码
2020/10/19 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
详解appium+python 启动一个app步骤
2017/12/20 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
Python sys模块常用方法解析
2020/02/20 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
教师演讲稿开场白
2014/08/25 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
交通安全横幅标语
2014/10/07 职场文书
自荐信怎么写
2015/03/04 职场文书
培训心得体会怎么写
2016/01/25 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL