微信小程序封装的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 13 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
js复制到剪切板的实例方法
Jun 28 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
Jul 30 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
Vue.js每天必学之过滤器与自定义过滤器
Sep 07 Javascript
简单实现js鼠标跟随效果
Aug 02 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 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中常量,变量的作用域和生存周期
2013/08/10 PHP
php和nginx交互实例讲解
2019/09/24 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
微信小程序 同步请求授权的详解
2017/08/04 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
2017/08/23 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
React 组件间的通信示例
2018/06/14 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
pycharm安装图文教程
2017/05/02 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
浅析python的优势和不足之处
2018/11/20 Python
Python二维码生成识别实例详解
2019/07/16 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
J2EE面试题
2016/03/14 面试题
《学会合作》教学反思
2014/04/12 职场文书
学校运动会简讯
2015/07/20 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书