微信小程序封装的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 相关文章推荐
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
AngularJS中的API(接口)简单实现
Jul 28 Javascript
jQuery+ajax实现修改密码验证功能实例详解
Jul 06 jQuery
解决Angular4项目部署到服务器上刷新404的问题
Aug 31 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
vue实现整屏滚动切换
Jun 29 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 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 similar_text 字符串的相似性比较函数
2010/05/26 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
2018/01/25 jQuery
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Java分治归并排序算法实例详解
2017/12/12 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
快速创建python 虚拟环境
2020/11/28 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
春节联欢晚会主持词范文
2014/03/24 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
教师党员自我评价范文
2015/03/04 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
电频谱管理的原则是什么
2022/02/18 无线电