电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Ajax?請求隊列解決方案并結合elementUi做全局加載狀態

瀏覽:224日期:2022-06-12 08:28:43
目錄
  • ajax 文件入口
  • 消息隊列
  • elementUi loading參數設置
  • 基于elementUI的loading全局加載
    • 應用場景
    • 1.引入庫
    • 2.定義全局loading
    • 3.使用

ajax 文件入口

可發送 blob文檔流, form表單 與 通常json解決方案
結合 消息隊列(messagelist)與elementUi(Loading) 制作請求加載方案
擁有 post 默認請求方案,也可依據傳入 修改請求方案(可能需要優化傳參放入地址)
具有 請求超時提醒函數,防止壞請求導致的加載不消失
配置有 notice(報錯) 控制方案,待后端解決消息分類(即: 開發者用與用戶用)

/**
 * @param {String} url 請求 `url` 地址
 * @param {Object, Array, FormData} params 參數數據
 * @param {Object, Array, FormData} query url 拼接參數
 * @param {String} method post, get, add, delete
 * @param {Boolean} notice false: 默認, 不直接顯示返回消息 ------- FIXME 待確認
 */
const ajax = ({ url, data = {}, query = {}, method = "post", notice = false, type = "" }) => {
  // 默認url 地址攜帶 參數
  const default_query = {
    pinUuid: store.getters.pinUuid,
    ebiId: store.getters.ebiId
  }
  query = Object.assign(query, default_query)
  url = urlQueryFormat(url, query)

  data.pinUuid = store.getters.pinUuid
  data = Object.assign(data, default_query)
  // 過濾重復的請求 事件
  // eslint-disable-next-line no-unused-vars
  const repeat = messagelist.findRepeat(url, data, method)
  // if (repeat.length > 0) {
  // eslint-disable-next-line no-constant-condition
  if (false) {
    Message.warning("數據正在獲取中, 請稍后...")
    return Promise.reject({ message: "數據正在獲取中, 請稍后..." })
  } else {
    // 獲取 分配的 rid 即 index
    const rid = messagelist.add(url, data, method)

    return new Promise((resolve, reject) => {
      // eslint-disable-next-line prefer-const
      let reqState = { url, method }
      if (method.toLowerCase() === "get") reqState["params"] = data
      else if (method.toLowerCase() === "post") {
reqState["data"] = data
if (type === "x_www_form_urlencoded") {
  request.defaults.headers.post["Content-Type"] = HttpConstant.FORM_DATA_REQ
  let ret = ""
  for (const it in reqState) {
    ret += encodeURIComponent(it) + "=" + encodeURIComponent(reqState[it]) + "&"
  }
  reqState["data"] = ret
} else if (type === "form_data") {
  request.defaults.headers.post["Content-Type"] = HttpConstant.MUL_FORM_REQ
} else if (type === "blob") {
  request.defaults.headers.post["Content-Type"] = HttpConstant.APPLICATION_BLOB_REQ
  reqState.responseType = type
} else {
  request.defaults.headers.post["Content-Type"] = HttpConstant.FORM_DATA_REQ
}
      }

      request(reqState).then(res => {
// setTimeout(() => { // 測試用 fortest
messagelist.del(rid)
resolve(res)
// }, 1000 * 2)
      }).catch(err => {
// 當請求錯誤 是否需要重新發包 網絡錯誤等 處理
messagelist.del(rid)
reject(err)
      })
    })
  }
}

消息隊列

使用 消息隊列 制作 請求防抖,防止重復請求印象服務器

/** loading 隊列 */
const messagelist = {
  loading: null,
  timer: null,
  state: {},
  add(url, params, method) {
    let rid = 0
    while (this.state[rid]) { ++rid }
    this.state[rid] = {
      rid,
      data: JSON.stringify({ url, params, method })
    }

    this.loading = Loading.service(loadingOption)
    this.initTimer()
    return rid
  },
  // url 作為key
  del(rid) {
    delete this.state[rid]
    if (Object.values(this.state).length <= 0) { this.closeLoading() }
  },
  findRepeat(url, params, method) {
    // 獲取重復相同請求
    return Object.values(this.state).filter(item => {
      return item.data === JSON.stringify({ url, params, method })
    }).map(item => { return { ...item, ...{ data: JSON.parse(item.data) }} })
  },
  initTimer() {
    if (this.timer) { clearTimeout(this.timer) }
    // 延遲 3s 強制close loading 狀態
    this.timer = setTimeout(() => {
      Message.error("請求超時, 自動關閉")
      if (this.loading) this.loading.close()
    }, 1000 * 5)
  },
  closeLoading() {
    if (this.loading) this.loading.close()
    clearTimeout(this.timer)
  }
}

elementUi loading參數設置

const loadingOption = {
  lock: true,
  text: "Loading",
  spinner: "el-icon-loading",
  background: "rgba(0, 0, 0, 0.7)"
}

ps: 其他配置項

const HttpConstant = {
  // 請求content-type類型
  "FORM_DATA_REQ": "application/x-www-form-urlencoded",
  "APPLICATION_JSON_REQ": "application/json",
  "MUL_FORM_REQ": "multipart/form-data",
  "APPLICATION_BLOB_REQ": "application/vnd.ms-excel;charset=utf-8",
}

基于elementUI的loading全局加載

應用場景

場景:前端在發送Ajax請求,請求后臺數據時,不允許用戶點擊當前頁面的其他按鈕。

Loading 還可以以服務的方式調用。引入 Loading 服務

1.引入庫

代碼如下(示例):

import { Loading } from "element-ui"

2.定義全局loading

代碼如下(示例):

/* 全局多彩加載層 */
Vue.prototype.$baseColorfullLoading = (wer) => {
  const loading = Loading.service({ // 聲明一個loading對象
    lock: true, // 是否鎖屏
    text: "正在加載...", // 加載動畫的文字
    spinner: "inner-circles-loader", // 引入的loading圖標
    background: "hsla(0,0%,100%,0)", // 背景顏色
    target: document.querySelector(wer)
  })
  setTimeout(function() { // 設定定時器,超時5S后自動關閉遮罩層,避免請求失敗時,遮罩層一直存在的問題
     loading.close() // 關閉遮罩層
   }, 2000000)
  return loading
}

3.使用

html標簽添加標識class 或 id(在表格上加遮罩)

//添加class="todoList"
<el-table
	:data="currentTableData"
	class="todoList"
	size="small"
	style="width: 100%"
	highlight-current-row
	@row-click="handleSelectionChange">
 </el-table>

js調用

// 請求時調用
const loading = this.$baseColorfullLoading(".app-main")
//請求完成后關閉
loading.close()

到此這篇關于Ajax 請求隊列解決方案并結合elementUi做全局加載狀態的文章就介紹到這了,更多相關Ajax 請求隊列內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Ajax
主站蜘蛛池模板: 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 北京网站建设公司_北京网站制作公司_北京网站设计公司-北京爱品特网站建站公司 | 移动机器人产业联盟官网| 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 菏泽知彼网络科技有限公司 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 安徽集装箱厂-合肥国彩钢结构板房工程有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 熔体泵|换网器|熔体齿轮泵|熔体计量泵厂家-郑州巴特熔体泵有限公司 | 南京欧陆电气股份有限公司-风力发电机官网 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 搪玻璃冷凝器_厂家-越宏化工设备 | 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 青岛成人高考_山东成考报名网 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 微型实验室真空泵-无油干式真空泵-微型涡旋耐腐蚀压缩机-思科涡旋科技(杭州)有限公司 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 首页_中夏易经起名网| 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 中药超微粉碎机(中药细胞级微粉碎)-百科 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 泰州物流公司_泰州货运公司_泰州物流专线-东鑫物流公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 |