微信小程序封装的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对象的函数
Dec 22 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
JS合并数组的几种方法及优劣比较
Sep 19 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
一系列Bootstrap导航条使用方法分享
Apr 29 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
Aug 25 Javascript
jQuery轮播图效果精简版完整示例
Sep 04 Javascript
如何使用Bootstrap创建表单
Mar 29 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
Jun 18 Javascript
小程序实现可拖动的悬浮按钮
Sep 07 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
Array对象方法参考
2006/10/03 Javascript
javascript 面向对象思想 附源码
2009/07/07 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
Angular2整合其他插件的方法
2018/01/20 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用Kivy将python程序打包为apk文件
2017/07/29 Python
python select.select模块通信全过程解析
2017/09/20 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
Python命令行click参数用法解析
2019/12/19 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
python中upper是做什么用的
2020/07/20 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
学校办公室主任职责
2013/12/27 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
服务宗旨标语
2014/07/01 职场文书