微信小程序封装的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中this关键字使用方法详解
Mar 08 Javascript
jQuery 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
JavaScript中的闭包(Closure)详细介绍
Dec 30 Javascript
jQuery插件简单实现方法
Jul 18 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
Aug 04 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
Vuejs+vue-router打包+Nginx配置的实例
Sep 20 Javascript
JavaScript实现无限级递归树的示例代码
Mar 29 Javascript
react MPA 多页配置详解
Oct 18 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
May 09 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 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+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
Javascript的&&和||的另类用法
2014/07/23 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
selenium+python环境配置教程详解
2019/05/28 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python配置文件处理的方法教程
2019/08/29 Python
Python程序控制语句用法实例分析
2020/01/14 Python
python中提高pip install速度
2020/02/14 Python
如何编写python的daemon程序
2021/01/07 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
什么叫做SQL注入,如何防止
2016/10/04 面试题
《最大的麦穗》教学反思
2014/04/17 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫