微信小程序封装的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在光标位置插入内容的实现代码
Jun 18 Javascript
通过继承IHttpHandle实现JS插件的组织与管理
Jul 13 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
JS OffsetParent属性深入解析
Jan 13 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
pace.js页面加载进度条插件
Sep 29 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
vue集成百度UEditor富文本编辑器使用教程
Sep 21 Javascript
详解vue文件中使用echarts.js的两种方式
Oct 18 Javascript
vue的for循环使用方法
Feb 12 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数字每三位加逗号的功能函数
2015/10/22 PHP
yii2 页面底部加载css和js的技巧
2016/04/21 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
详解JS面向对象编程
2016/01/24 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
javascript用rem来做响应式开发
2018/01/13 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
Python贪心算法实例小结
2018/04/22 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
Unineed旗下时尚轻奢网站:FABHunt
2019/05/13 全球购物
企业元宵节主持词
2014/03/25 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
幼儿教师自我剖析材料
2014/09/29 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
MySQL GRANT用户授权的实现
2021/06/18 MySQL
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers