IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ajax封装,promise封装ajax,axios封装 -> 正文阅读

[JavaScript知识库]ajax封装,promise封装ajax,axios封装

一、概念

ajax:

????????核心XMLHttpRequest ,在不重新加载整个页面的情况下更新部分数据

promise:

????????承诺,只有三种模式(?pending:执行状态、fulfilled:已成功、rejected:已失败),且不受外界影响,解决回调地域

????????官网地址:https://www.promisejs.org/

axios:

????????基于promise的网络请求库

????????参考地址:使用说明 · Axios 中文说明 · 看云

二、使用(封装)

1、ajax(原生封装)

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div>1121212</div>
  <script>
    //封装ajax请求
    function fun (options) {
      //初始化默认值
      options = options || {}
      options.type = (options.type || 'POST').toUpperCase()
      const params = options.data
      // 创建XMLHttpRequest对象
      const xhr = new XMLHttpRequest()
      //发送请求
      if (options.type === "GET") {
        xhr.open('GET', options.url + "?" + getParams(params), true)
        xhr.send()
      } else if (options.type === "POST") {
        xhr.open('POST', options.url, true)
        //设置请求头
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        xhr.send(getParams(params))

      }
      //设置返回信息格式
      xhr.responseType="json"
      //接收返回信息
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status >= 200 && xhr.status < 300) {
            options.success(xhr.response)
          } else {
            options.fail("参数错误" + status)
          }

        }
      }
    }
    //调用
    fun(
      {
        type: "post",
        url: 'http://192.168.166.146:8184/indexPage/readIndexPages',
        // url: ' http://192.168.166.146:8184/Topo/getCloudStatus',
        data: {
          name: 30
        },
        success: function (text, xml) { // 成功回调
          console.log(text, xml);
        },
        fail: function (status) { // 失败回调
          console.log(status);
        }
      }
    )
    //处理传值形式
    function getParams (data) {
      let arr = []
      for (const key in data) {
        arr.push(`${key}=${data[key]}`)
      }
      return arr.join('$')
    }
  </script>
</body>

</html>

2、promise封装ajax


<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div>1121212</div>
  <script>
    //封装ajax请求
    function fun (options) {
      return new Promise((resolve, reject) => {
        //初始化默认值
        options = options || {}
        options.type = (options.type || 'POST').toUpperCase()
        const params = options.data
        // 创建XMLHttpRequest对象
        const xhr = new XMLHttpRequest()
        //发送请求
        if (options.type === "GET") {
          xhr.open('GET', options.url + "?" + getParams(params), true)
          xhr.send()
        } else if (options.type === "POST") {
          xhr.open('POST', options.url, true)
          //设置请求头
          xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
          xhr.send(getParams(params))

        }
        //设置返回信息格式
        xhr.responseType = "json"
        //接收返回信息
        xhr.onreadystatechange = function () {
          if (xhr.readyState === 4) {
            if (xhr.status >= 200 && xhr.status < 300) {
              resolve(xhr.response)
            } else {
              reject(new Error(xhr.statusText))
            }

          }
        }
        xhr.onerror = function () {
          reject(new Error(xhr.statusText))
        }
        //设置接口请求超时时间
        setTimeout(() => {
          //取消当前请求
          xhr.abort()
        }, 5000)

      })

    }
    //调用
    fun(
      {
        type: "post",
        url: 'http://192.168.166.146:8184/indexPage/readIndexPages',
        // url: ' http://192.168.166.146:8184/Topo/getCloudStatus',
        data: {
          name: 30
        },
      }
    ).then((res) => {
      console.log(res);
    }).catch((reson) => {
      console.log(reson);
    })
    //处理传值形式
    function getParams (data) {
      let arr = []
      for (const key in data) {
        arr.push(`${key}=${data[key]}`)
      }
      return arr.join('$')
    }
  </script>
</body>

</html>

3、axios(封装)

①、项目中src文件下创建utils文件,文件中创建request.js文件

import axios from 'axios'

export default request = axios.create({
  baseURL: 'https://some-domain.com/api/',
  timeout: 1000,
  headers: {'X-Custom-Header': 'foobar'}
});

②、项目中src文件下创建api文件,里面创建对应模块test.js文件

import request from '@/utils/request'
export function getAllData(params){
  return request({
    method:'GET',
    url:'/xxx',
    params,

  })
}

③、api文件中创建index.js文件,并且引入api文件下其他js文件

import test1 from './test1'
import test2 from './test2'
import test3 from './test3'

export default {
  test1,
  test2,
  test3,
}

④、挂载全局,在main.js文件中引入api文件下的index.js文件

import api from './api'

Vue.prototype.$api=api

⑤、引用

this.$api.test.getAllData()//传参数调用接口

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:05:12  更:2022-09-13 11:06:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:43:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码