前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装

这篇具有很好参考价值的文章主要介绍了前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

图片上传

1.获取图片文件对象

 // 文件选择元素->change改变事件

document.querySelector('.upload').addEventListener('change', e => {

      // 1. 获取图片文件

      console.log(e.target.files[0])

2.使用FormData携带文件

 // 2. 使用 FormData 携带图片文件

      const fd = new FormData()

      fd.append('img', e.target.files[0])

3.提交表单数据到服务器,使用图片的url网站

 axios({

        url: 'http://hmajax.itheima.net/api/uploadimg',

        method: 'POST',

        //提交表单数据给服务器

        data: fd

      }).then(result => {

        console.log(result)

        // 取出图片url网址,用img标签加载显示

        const imgUrl = result.data.data.url

        document.querySelector('.my-img').src = imgUrl

      })

FormData表单数据扩展

FormData可以直接获取表单数据

并通过自带的get,getall方法读取表单数据

通过set或者append方法在表单中创建或者更新新的键值对

// 1、创建一个空对象
var formData = new FormData(); 
<form id="myForm" action="" method="post">
    <input type="text" name="name">名字
    <input type="password" name="psw">密码
    <input type="submit" value="提交">
</form>
// 获取页面已有的一个form表单
var form = document.getElementById("myForm");
// 用表单来初始化
var formData = new FormData(form);
// 我们可以根据name来访问表单中的字段
var name = formData.get("name"); // 获取名字
var psw = formData.get("psw"); // 获取密码
// 当然也可以在此基础上,添加其他数据
formData.append("token","kshdfiwi3rh");

// 1、获取值:通过get(key)/getAll(key)来获取对应的value
formData.get("name"); // 获取key为name的第一个值
formData.getAll("name"); // 返回一个数组,获取key为name的所有值

// 2、添加数据:通过append(key, value)来添加数据
// 如果指定的key不存在则会新增一条数据,如果key存在,则添加到数据的末尾
formData.append("k1", "v1");
formData.append("k1", "v2");

formData.get("k1"); // "v1"
formData.getAll("k1"); // ["v1","v2","v3"]

// 3、设置修改数据:set(key, value)来设置修改数据
// 如果指定的key不存在则会新增一条,如果存在,则会修改对应的value值
formData.append("k1", "v1");
formData.set("k1", "1");
formData.getAll("k1"); // ["1"]

// 4、判断是否存在对应数据:has(key)来判断是否对应的key值
formData.has("k1"); // true

// 5、删除数据
formData.delete("k1");

设置背景图片js

目标:网站-更换背景

1. 选择图片上传,设置body背景

2. 上传成功时,"保存"图片url网址

3. 网页运行后,"获取"url网址使用

document.querySelector('.bg-ipt').addEventListener('change', e => {

  // 1. 选择图片上传,设置body背景

  console.log(e.target.files[0])

  const fd = new FormData()

  fd.append('img', e.target.files[0])

  axios({

    url: 'http://hmajax.itheima.net/api/uploadimg',

    method: 'POST',

    data: fd

  }).then(result => {

    const imgUrl = result.data.data.url

    document.body.style.backgroundImage = `url(${imgUrl})`

    // 2. 上传成功时,"保存"图片url网址

    localStorage.setItem('bgImg', imgUrl)

  })

})

// 3. 网页运行后,"获取"url网址使用

const bgUrl = localStorage.getItem('bgImg')

console.log(bgUrl)

bgUrl && (document.body.style.backgroundImage = `url(${bgUrl})`)

Ajax原理-XMLHttpRequest

定义

XMLHttpRequest(XHR)对象用于与服务器交互.通过XMLHttpRequest可以不刷新页面的情况下请求特定URL,获取数据.这允许网页在不影响用户操作的情况下,更新页面的局部内容.XHR在AJAX编程中被大量使用.

关系

axios内部使用XMLHttpRequest与服务器交互

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

好处

掌握使用XHR与服务器进行数据交互,了解axios内部原理

步骤

1.创建XMLHttpRequest对象

2.配置请求方法和请求url地址

3.监听loadend事件,接收响应结果

4.发起请求.

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

XMLHttpRequest-查询参数

定义:浏览器提供给服务器的额外参数,让服务器返回浏览器想要的数据

语法:http://xxxx.com/xxx/xxxx?参数1=值1&参数名2=值2

查询多个值的时候,可以使用URLSearchParams方法将值转换成需要的格式

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

XMLHttpRequest-数据提交

需求:通过XHR提交用户名和密码,完成注册功能

核心:

请求头设置Content-Type:aplication/josn

请求体携带JSON字符串

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

Promise

定义

对象用于表示一个异步操作的最终完成(或失败)及其结果

好处

1.逻辑更清晰

2.了解axios函数内部运行机制

3.能解决回调函数地域问题

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

Promise-三种状态

作用:了解Promise对象如何关联的处理函数,以及代码执行顺序

概念:一个promise对象,必然处于以下几种状态之一

待定(pending)        :初始状态,既没有兑现,也没有拒绝

已兑现(fulfilled)        :意味着,操作成功完成

已拒绝(rejected)        :意味着,操作失败

前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装,学习

注意:promise对象一旦兑现/拒绝就是已敲定了,状态无法再被改变文章来源地址https://www.toymoban.com/news/detail-773850.html

简单的axios封装函数

 function myAxios(config) {
      return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest()

        if (config.params) {
          const paramsObj = new URLSearchParams(config.params)
          const queryString = paramsObj.toString()
          config.url += `?${queryString}`
        }
        xhr.open(config.method || 'GET', config.url)

        xhr.addEventListener('loadend', () => {
          if (xhr.status >= 200 && xhr.status < 300) {
            resolve(JSON.parse(xhr.response))
          } else {
            reject(new Error(xhr.response))
          }
        })
        // 1. 判断有data选项,携带请求体
        if (config.data) {
          // 2. 转换数据类型,在send中发送
          const jsonStr = JSON.stringify(config.data)
          xhr.setRequestHeader('Content-Type', 'application/json')
          xhr.send(jsonStr)
        } else {
          // 如果没有请求体数据,正常的发起请求
          xhr.send()
        }
      })
    }

到了这里,关于前端框架前置学习(3) AJAX原理 XMLHttpRequest,Promise,简易axios函数封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

    目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏览时钟 步骤: 什么是模块化 定

    2024年01月16日
    浏览(35)
  • AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(七)

    实操: server.js utils/lib/index.js utils/package.json 从别处(网上、其他人手中)拿到写好的项目,一般不携带node_modules文件夹(所占存储空间大) 但有package.json文件,里面记载了当前项目下载过的包 还有package-lock.json文件,固定软件包的版本 导入模块/包,除了自己创建的模块、包

    2024年01月22日
    浏览(52)
  • AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(五)—— 项目-新闻头条-数据管理平台-ajax综合案例前端

    愿许秋风知我意,解我心中意难平。 推荐使用, 每个程序员都有自己的管理方式。 HTML结构: 1.为什么要提取公共前缀地址(基地址),因为公司业务可能会更换服务器,如果你不想一条一条地修改请求地址的话。 后续使用axios时,url不需要再写前缀。 2.请求成功与失败 成

    2024年01月25日
    浏览(37)
  • Ajax_4(进阶)同步异步+ 宏任务微任务 + Promise链 + async终极解决方案 +事件循环原理 + 综合案例

    01-同步代码和异步代码 什么是同步代码? 同步代码:逐行执行,需要原地等待结果后,才继续向下执行。 什么是异步代码? 调用后耗时,不阻塞代码继续执行,(不必原地等待),在将来完成后 触发一个 回调函数 。 代码阅读 目标:阅读并回答代码执行和打印的顺序 打印

    2024年02月13日
    浏览(32)
  • ajax请求——XMLHttpRequest请求

     个人练习笔记-----Ajax01 一、GET  https://v5.crmeb.net/api/groom/list/3?page=1limit=9  ------协议:// 域名 / 地址?参数 1.xhr.open(\\\"GET\\\",\\\"https://v5.crmeb.net/api/groom/list/3?page=1limit=9\\\");对应的参数从下图中所示中获取 2.xhr.setRequestHeader(\\\"Content-Type\\\",\\\"application/json\\\");//验证身份 xhr.setRequestHeader(\\\"Authori-Z

    2024年02月03日
    浏览(28)
  • ajax-XMLHttpRequest的基本使用

    能够知道如何使用 XMLHttpRequest 发起 Ajax 请求 能够知道如何封装自己的Ajax函数 能够使用 XMLHttpRequest Level2 中提供的新特性 能够知道 jQuery 中如何实现文件上传与loading效果 能够知道如何使用 axios 发起Ajax请求 XMLHttpRequest (简称 xhr )是浏览器提供的 Javascript 对象,通过它,可以

    2024年02月02日
    浏览(24)
  • 5.Python-使用XMLHttpRequest对象来发送Ajax请求

    题记          使用XMLHttpRequest对象来发送Ajax请求,以下是一个简单的实例和操作过程。 安装flask模块          pip install flask  安装mysql.connector模块          pip install mysql-connector-python  编写app.py文件          app.py文件如下:     编写index.html          注意:i

    2024年02月07日
    浏览(26)
  • Ajax异步通信与XMLhttpRequest对象的属性方法及事件

    AJAX 的英文全称 Asynchronous JavaScript And XML,其中Asynchronous就是指的异步,这里异步指通过 AJAX 向服务器请求数据,在不刷新整个页面的情况下,更新页面上的部分内容。 通过使用Ajax,可以创建更动态和响应性的Web应用程序,因为它使得页面可以在后台与服务器进行数据交换,

    2024年03月14日
    浏览(30)
  • Promise封装Ajax请求

    调用方法: 以上代码的含义是:发送一个 POST 请求到 URL /api/test ,数据为 {foo: \\\'bar\\\'} ,返回一个 Promise 对象,使用 then 方法处理成功的回调函数,使用 catch 方法处理失败的回调函数。 Promise是JavaScript中一种非常常用的异步编程解决方案。它可以非常方便地处理异步操作,避免

    2024年02月08日
    浏览(27)
  • A.图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk、node2vec);图神经网络算法(GCN、GAT、GraphSage),部分进阶 GNN 模型(UniMP标签传播、ERNIESage)模型算法等,完成项目实战 专栏链接 :图学习图神经网络算法专栏简介:含图算法(图游走模型、图神经网络算法等)原

    2024年02月01日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包