找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 142|回复: 0

layui封装ajax

[复制链接] IP属地:广东省广州市
发表于 2023-7-5 09:56:10 | 显示全部楼层 |阅读模式
有时候我们想通过ajax访问接口,但又感觉每一次都要去判断一遍ajax的前置动作(在头里放入token,开启加载动画等)和后置动作(判断token是否超时自动刷新,关闭加载动画等)很是啰嗦,这时候我们可以通过封装ajax省略这些没必要的代码。
1. 编写wxajax.js
  1. layui.define(['layer', 'jquery'], function (exports) {
  2.     "use strict";

  3.     let MOD_NAME = "wxajax";
  4.     let layer = layui.layer;
  5.     let $ = layui.jquery;

  6.     let config = {
  7.         headers: {}, //http请求头,可以放入token等等
  8.         baseURL: "", //请求基地址
  9.         timeout: 3000,//超时时间,为0时则无超时限制
  10.     };

  11.     let wxajax = new function () {
  12.         this.get = function (url, params) {
  13.             return ajax("GET", url, params);
  14.         };

  15.         this.post = function (url, params) {
  16.             return ajax("POST", url, JSON.stringify(params));
  17.         };

  18.         this.delete = function (url, params) {
  19.             return ajax("DELETE", url, params);
  20.         }

  21.         this.put = function (url, params) {
  22.             return ajax("PUT", url, JSON.stringify(params));
  23.         }
  24.        
  25.                 // 放入本地缓存
  26.         this.setData = function (key, value) {
  27.             layui.data('LocalData', {
  28.                 key: key,
  29.                 value: value
  30.             })
  31.         };

  32.                 // 获取本地缓存
  33.         this.getData = function (key) {
  34.             let localData = layui.data('LocalData');
  35.             return localData[key];
  36.         };
  37.     }

  38.     function ajax(type, url, data) {
  39.         return new Promise(function (resolve, reject) {
  40.             let roleSaveLoading = layer.msg('数据提交中,请稍候', {icon: 16, time: false, shade: 0.8});
  41.             $.ajax({
  42.                 type: type,
  43.                 url: config.baseURL + url,
  44.                 contentType: "application/json; charset=utf-8",
  45.                 data: data,
  46.                 success: function (res) {
  47.                     layer.close(roleSaveLoading);
  48.                     // 进行业务处理
  49.                     if (!res.success) {
  50.                         layer.msg(res.message);
  51.                     } else {
  52.                         resolve(res);
  53.                     }
  54.                 },
  55.                 error: function () {
  56.                     layer.close(roleSaveLoading);
  57.                     layer.msg("系统繁忙,请稍后再试!");
  58.                     reject();
  59.                 }
  60.             });
  61.         });
  62.     };

  63.     exports(MOD_NAME, wxajax);
  64. })

复制代码
2. 添加到layui.js中
  1. /**
  2. * 全局路径引用容错处理
  3. * */
  4. window.rootPath = (function (src) {
  5.     src = document.scripts[document.scripts.length - 1].src;
  6.     return src.substring(0, src.lastIndexOf("/") + 1);
  7. })();

  8. /**
  9. * 扩展包集成
  10. * */
  11. layui.config({
  12.     base: rootPath + "modules/",
  13.     version: true
  14. }).extend({
  15.     flyio: "wxajax"
  16. });

复制代码
3. 使用
  1. <script>
  2.     layui.use(['form','wxajax'], function () {
  3.         let form = layui.form;
  4.         let wxajax= layui.wxajax;

  5.         // 登 录 提 交
  6.         form.on('submit(login)', function (data) {
  7. wxajax.post('/auth/login', data.field).then(res => {
  8.                     // 进行业务处理
  9.                 console.log(data)
  10.             })
  11.             return false;
  12.         });
  13.     })
  14. </script>
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|西兴社区 ( 蜀ICP备2022005627号 )|网站地图

GMT+8, 2024-12-27 12:36 , Processed in 0.655365 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表