成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:425日期: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
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产麻豆综合| 日本伊人精品一区二区三区观看方式| 久久中文字幕一区二区三区| 欧美经典三级视频一区二区三区| 石原莉奈在线亚洲三区| 99国产精品久久久久老师| 中文av一区特黄| 午夜久久tv| 久久精品无码一区二区三区| 成人黄色在线网站| 欧美一级黄色片| 国产高清无密码一区二区三区| 国产日本精品| 亚洲一区二区三区美女| 亚洲欧美国产精品桃花| 亚洲国产精品ⅴa在线观看| 色综合咪咪久久| 国产日韩精品一区| 国产一区二区视频在线| 欧美日韩国产天堂| 国产激情偷乱视频一区二区三区 | 极品av少妇一区二区| 国产精品女主播av| 欧美日韩国产一区精品一区| 日韩一区二区三区在线| 国产经典欧美精品| 精品国产青草久久久久福利| www.久久精品| 欧美国产一区在线| 亚洲麻豆视频| 亚洲电影一级黄| 在线一区二区观看| 国产九色sp调教91| 色婷婷激情综合| 精品一区二区三区在线播放视频| 亚洲精选在线| 亚洲午夜私人影院| 欧洲精品在线观看| 国产二区国产一区在线观看 | 欧美成人一区二区三区| 成人福利视频在线| 国产农村妇女毛片精品久久麻豆| 国产99久久精品| 欧美精品一区二区三区在线| 久久精品久久久精品美女| 91精品在线免费| 欧美在线日韩精品| 亚洲码国产岛国毛片在线| 久久电影一区| 激情综合色播激情啊| 色综合久久久久综合体| 狠狠色狠狠色综合系列| 久久婷婷成人综合色| 国模大胆一区二区三区| 亚洲午夜精品17c| 欧美日本一道本在线视频| 91同城在线观看| 亚洲精品一线二线三线| 在线精品亚洲一区二区| 五月天一区二区三区| 欧美嫩在线观看| 欧美激情视频一区二区三区免费| 26uuu国产电影一区二区| 极品中文字幕一区| 午夜精品视频在线观看| 5858s免费视频成人| 国产米奇在线777精品观看| 久久久综合网站| 国产日韩欧美亚洲一区| 麻豆91免费看| 精品国产免费一区二区三区四区| k8久久久一区二区三区| 中文字幕中文字幕一区二区| 久久精品九九| 成人精品鲁一区一区二区| 中文字幕av一区二区三区高| 91久久线看在观草草青青 | 国产精品热久久久久夜色精品三区| 亚洲欧美影院| 午夜伦理一区二区| 26uuu亚洲婷婷狠狠天堂| 国产精品一区二区欧美| 九色porny丨国产精品| 亚洲国产精品激情在线观看 | 黑人一区二区| 日本不卡视频一二三区| 欧美在线免费播放| 色综合色综合色综合色综合色综合| 亚洲国产电影在线观看| 蜜桃视频一区| 色综合欧美在线| 日韩电影一区二区三区四区| 国产亚洲一区二区三区| 欧美伊人久久大香线蕉综合69| 极品少妇xxxx精品少妇偷拍 | 欧美电影一区二区三区| 韩国一区二区三区美女美女秀| 一区二区三区欧美亚洲| 日韩一区二区三区在线观看| 欧美91福利在线观看| 日韩国产在线观看一区| 欧美国产激情一区二区三区蜜月| 激情成人综合| 国产精品中文字幕欧美| 亚洲综合久久av| 久久久久久免费毛片精品| 日本丰满少妇一区二区三区| 国产一区二区三区自拍| 国内精品久久久久影院色| 一区二区视频在线看| 精品日韩在线观看| 色八戒一区二区三区| 激情一区二区三区| 懂色av一区二区三区蜜臀| 日韩精品欧美成人高清一区二区| 欧美一区欧美二区| 欧美在线综合| 国产精品一区二区你懂的| www国产成人| 一本色道久久综合| 理论电影国产精品| 国产夜色精品一区二区av| 亚洲黄色影院| 99riav久久精品riav| 精品一区二区三区香蕉蜜桃| 亚洲国产欧美日韩另类综合 | 日韩一级片在线观看| 亚洲综合精品| 欧美日韩国产免费观看| 国产成人久久精品77777最新版本| 中文字幕电影一区| 欧美一区二区高清| 在线观看视频91| 亚洲免费久久| 欧美fxxxxxx另类| 国产成人免费在线观看| 日韩电影在线观看网站| 亚洲黄色性网站| 欧美激情在线观看视频免费| 日韩丝袜美女视频| 欧美日韩精品一区视频| 久久久999| 一本色道久久综合| 狠色狠色综合久久| 91免费在线视频观看| 国产成人精品影视| 亚洲欧洲韩国日本视频| 久久综合久久综合亚洲| 欧美视频一区二区在线观看| 91小宝寻花一区二区三区| 国产激情一区二区三区四区| 亚洲综合激情网| 中文字幕av不卡| 久久精品视频一区二区三区| 精品国产免费一区二区三区四区| 亚洲欧美网站| 91视频精品在这里| 日韩欧美一区在线| 亚洲一卡二卡三卡四卡五卡| 一区二区三区精品视频| 国产成人午夜视频| 欧美视频一区二区| 精品亚洲aⅴ乱码一区二区三区| 一区二区三区在线看| 国产精品影视网| 国产精品亚洲午夜一区二区三区| 亚洲一二三四在线观看| 亚洲国产精品日韩| 亚洲成人免费在线| 国产精品二区一区二区aⅴ污介绍| 欧美自拍丝袜亚洲| 伊大人香蕉综合8在线视| 欧美一区二区三区在线免费观看| 亚洲二区在线观看| 亚洲综合成人在线| 亚洲欧美日韩国产综合在线| 欧美一区二区在线免费播放| 国产伦精品一区二区三区照片91 | 99视频热这里只有精品免费| 首页亚洲欧美制服丝腿| 日韩视频免费观看高清在线视频| 精品久久五月天| 亚洲视频精选在线| 99在线精品视频| 日韩欧美中文字幕公布| 蜜臀av性久久久久蜜臀aⅴ四虎| 综合中文字幕亚洲| 蜜桃免费网站一区二区三区| 国产成人av电影免费在线观看| 日本午夜精品视频在线观看| 蜜桃一区二区三区在线| 欧美一级精品大片| 岛国精品一区二区| 色综合久久久久网| 亚洲欧美国产不卡| 亚洲国产成人精品视频| 久久精品人人做人人爽人人 | 久久高清免费观看| 久久不射中文字幕| 色激情天天射综合网|