位置: IT常识 - 正文

JavaScript之Ajax-axios表单提交

编辑:rootadmin
JavaScript之Ajax-axios表单提交

目录

一.表单概念

二.表单提交

三.FormData语法

四.头像上传模板

五.请求体类型

六.图书管理(增删改查) 

七.axios语法优化写法 

优化1: axios全局配置

优化2: 默认的method

优化3: axios的快捷方法


一.表单概念

推荐整理分享JavaScript之Ajax-axios表单提交,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

form标签(表单)是用来收集用户输入的信息

一个完整的表单的组成

1.表单标签: form

2.表单域: input, checkbox, select ...

3.表单按钮<button type="submit"></button>

<form> <input type="text" name="email_or_mobile"/> <input type="password" name="password" /> <input type="checkbox" name="remember_me" checked /> <button type="submit">登录</button></form>

 

 

 二.表单提交<!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>05.案例_表单提交</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"> <style> html, body { background-color: #f8f8f8; } .login-box { width: 400px; position: fixed; top: 20%; left: 50%; transform: translateX(-50%); border: 1px solid #efefef; padding: 20px; border-radius: 4px; box-shadow: 1px 1px 5px #cfcfcf; background-color: #fff; transition: box-shadow 0.3s ease; } .login-box:hover { transition: box-shadow 0.3s ease; box-shadow: 1px 1px 20px #cfcfcf; } </style></head><body> <div class="login-box"> <form id="myForm"> <div class="form-group"> <label for="username">Account</label> <!-- 账号 --> <input type="text" class="form-control" name="username" id="username" autocomplete="off"> <small id="emailHelp" class="form-text text-muted">The available account is <strong>admin</strong></small> </div> <div class="form-group"> <!-- 密码 --> <label for="password">Password</label> <input type="password" class="form-control" name="password" id="password"> <small id="emailHelp" class="form-text text-muted">The available password is <strong>123456</strong></small> </div> <button type="submit" class="btn btn-primary" id="btnLogin">Submit</button> </form> </div> <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script> <script src="./lib/form-serialize.js"></script> <script> </script></body></html>

实现点击登录按钮, 调用登录接口, 返回结果用alert提示

// 目标: 用整体获取插件, 完成登录的表单提交效果// 请求地址: http://ajax-api.itheima.net/api/login// 请求方式: POST// 参数: { username: 用户名, password:密码 }// 1. 提交按钮, 点击事件document.querySelector('#btnLogin').addEventListener('click', e => { e.preventDefault() // 2. 整体获取登录表单参数名和值对象 let formObj = serialize(document.querySelector('#myForm'), { hash: true }) // 3. 使用axios发送请求,之后根据响应结果,做提示 axios({ url: 'http://ajax-api.itheima.net/api/login', method: 'POST', data: formObj }).then(({ data: res }) => { alert(res.message) }).catch(err => { alert('登录失败'); })})

 三.FormData语法

概念:以键值对形式存放数据的容器, 常用于装载文件对象

FormData的正确使用方法:实例化一个对象,用它的append方法加入参数名和值

语法格式:

// 1. 创建一个FormData对象let fd = new FormData()// 2. 向对象中添加 数据// FormData.append(属性名, 属性值)// 示例:fd.append('name', '小马');四.头像上传模板JavaScript之Ajax-axios表单提交

使用formData来实现头像上传并回显 ,掌握按钮关联隐藏文件选择器能力

先给出静态HTML代码:

<!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>案例_头像上传</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"> <style> .thumb-box { text-align: center; margin-top: 50px; } .thumb { width: 250px; height: 250px; object-fit: cover; border-radius: 50%; border: 5px solid black !important; } </style></head><body> <div class="thumb-box"> <!-- 头像 --> <img class="img-thumbnail thumb" src="./lib/images/cover.jpg"> <div class="mt-2"> <input type="file" id="iptFile" accept="image/*"> </div> </div> <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script> <script> </script></body></html>

核心javascript代码:

let iptFile = document.querySelector('#iptFile')let img = document.querySelector('.thumb')// 检测文件选择器值变化iptFile.addEventListener('change', (e) => { // 当选择了文件, 再执行里面代码 if (e.target.files.length === 0) return // 因为要携带文件, 所以使用FormData实例装载 let fd = new FormData() // avatar这个名字是接口文档约定的 fd.append('avatar', e.target.files[0]) // axios发请求 axios({ url: 'http://ajax-api.itheima.net/api/file', method: 'post', data: fd }).then(({ data: res }) => { // 6. 成功后, 服务器返回图片地址铺设到img标签回显 img.src = res.data.url })})

完成效果图示例:

五.请求体类型

请求体分为3种常用类型和场景

请求头中的Content-Type字段,用来标记请求体内容的类型

axios自动根据data值的类型, 帮我们自动设置的

3种Content-Type

六.图书管理(增删改查) 

静态HTML代码

<!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>图书管理</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"> <style> :root { font-size: 15px; } body { padding-top: 15px; } </style></head><body> <!-- 栅格系统 --> <div class="container"> <div class="d-flex justify-content-between align-items-center"> <h1>图书管理</h1> <button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#addModal" id="myAddBtn">添加</button> </div> <table class="table table-bordered table-striped table-dark table-hover text-center"> <thead> <!-- 表头行 --> <tr> <th scope="col">Id</th> <th scope="col">书名</th> <th scope="col">作者</th> <th scope="col">出版社</th> <th scope="col">操作</th> </tr> </thead> <tbody> <!-- 表格中的每一行 --> <tr> <th scope="row">xxx</th> <td>xxx</td> <td>xxx</td> <td>xxx</td> <td> <button type="button" class="btn btn-link btn-sm btn-delete">删除</button> <button type="button" class="btn btn-link btn-sm btn-update">编辑</button> </td> </tr> </tbody> </table> </div> <!-- add Modal --> <div class="modal fade" id="addModal"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">添加图书</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="addForm" class="p-3"> <!-- 书名 --> <div class="mb-3"> <label class="form-label">书名</label> <input type="text" name="bookname" class="form-control" placeholder="请输入图书名称" name="bookname" /> </div> <!-- 作者 --> <div class="mb-3"> <label class="form-label">作者</label> <input type="text" name="author" class="form-control" placeholder="请输入作者名字" name="author" /> </div> <!-- 出版社 --> <div class="mb-3"> <label class="form-label">出版社</label> <input type="text" name="publisher" class="form-control" placeholder="请输入出版社名称" name="publisher" /> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button> <button type="button" class="btn btn-primary" id="addBtn">确认</button> </div> </div> </div> </div> <!-- edit Modal --> <div class="modal fade" id="editModal"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">编辑图书</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <form id="editForm" class="p-3"> <input type="hidden" name="id" /> <!-- 书名 --> <div class="mb-3"> <label class="form-label">书名</label> <input type="text" name="bookname" class="form-control" placeholder="请输入图书名称" name="bookname" /> </div> <!-- 作者 --> <div class="mb-3"> <label class="form-label">作者</label> <input type="text" name="author" class="form-control" placeholder="请输入作者名字" name="author" /> </div> <!-- 出版社 --> <div class="mb-3"> <label class="form-label">出版社</label> <input type="text" name="publisher" class="form-control" placeholder="请输入出版社名称" name="publisher" /> </div> </form> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button> <button type="button" class="btn btn-primary" id="editBtn">确认</button> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js"></script> <script src="./lib/form-serialize.js"></script></body></html>

核心动态javascript代码:

<script> // 查询 function render() { axios({ url: 'http://ajax.itheima.net/api/books/', // url: 'http://ajax-api.itheima.net/api/books', method: 'GET', }).then(res => { // console.log(res.data.data); const arr = res.data.data // 显示到页面 let str = arr.map(function (item) { return ` <tr> <th scope="row">${item.id}</th> <td>${item.bookname}</td> <td>${item.author}</td> <td>${item.publisher}</td> <td> <button data-id="${item.id}" type="button" class="btn btn-link btn-sm btn-delete">删除</button> <button data-id="${item.id}" type="button" class="btn btn-link btn-sm btn-update">编辑</button> </td> </tr> ` }).join('') document.querySelector('#tbody').innerHTML = str }) } render() // 删除事件委托(删除图书) document.querySelector('#tbody').addEventListener('click', function (e) { // console.log(e.target.tagName); if (e.target.classList.contains('btn-delete')) { const id = e.target.dataset.id // alert(id) axios({ url: 'http://ajax.itheima.net/api/books/' + id, method: 'DELETE' }).then(res => { console.log(res); // 重发一下,更新页面 render() }) } }) // 添加图书操作 // 获取模态框表单信息 const addModal = new bootstrap.Modal(document.querySelector('#addModal')) const addForm = document.querySelector('#addForm') // 获取模态框确认按钮 const addBtn = document.querySelector('#addBtn') addBtn.addEventListener('click', function () { // 收集用户输入的json对象 let data = serialize(addForm, { hash: true }) axios({ url: 'http://ajax.itheima.net/api/books/', method: 'POST', data: data }).then(({ data: res }) => { console.log(res.data.data); // // 6. 重新请求并铺设覆盖, 并让表单清空, 模态框消失 addForm.reset() // 触发form的原生事件方法让它重置 // 调用hide()方法隐藏 addModal.hide() // 触发BS内置方法, 让BS的模块框消失 render() }) }) // 修改图书 const editModal = new bootstrap.Modal(document.querySelector('#editModal')) const editForm = document.querySelector('#editForm') // 通过tbody事件委托给带有btn-update类名的按钮注册点击事件 document.querySelector('tbody').addEventListener('click', function (e) { // 当鼠标点击到包含有btn-update类名的时候,返回结果 if (e.target.classList.contains('btn-update')) { const id = e.target.dataset.id editModal.show() axios({ url: 'http://ajax.itheima.net/api/books/' + id, method: 'GET', }).then(res => { // console.log(res.data.data); const newRes = res.data.data for (let key in newRes) { // console.log(key); // console.log(newRes[key]); editForm.querySelector(`[name=${key}]`).value = newRes[key] } }) } }) // 修改数据保存 document.querySelector('#editBtn').addEventListener('click', function () { let edit = serialize(editForm, { hash: true }) console.log(edit); axios({ url: `http://ajax.itheima.net/api/books/${edit.id}`, method: 'PUT', data: edit }).then(res => { console.log(res); render() editModal.hide() }) }) </script>

七.axios语法优化写法 

设置axios基地址配置,优化axios的写法

优化1: axios全局配置

每次请求地址, 接口文档只有后半段, 原因是所有前面的基础地址相同 。所以axios提供了一个全局的属性defaults.baseURL, 在每次axios函数发请求时, 具体请求的地址为"baseURL值+url值" 。

语法: axios.defaults.baseURL = '前缀基础地址' (简称基地址)

直接对axios本身进行设置

// 目标: axios可以提前设置一个基地址// 知识点: 函数也是对象// 前缀地址(基地址)axios.defaults.baseURL = 'http://ajax-api.itheima.net'优化2: 默认的method

axios请求时, method选项, 内部默认用"GET"方式, 所以也可以省略不写

优化3: axios的快捷方法

还有一些请求方式的方法可以直接使用例如语法为:

// 下面两种写法是等价的axios({ url: 'xx', method: 'POST', data: { a: 1 }})axios.post('xx', {a:1} )// 下面两种方式是等价的axios({ url: 'xx', method: 'get', params: { a: 1 }})axios.get('xx', {params: {a:1} } )

 

屏幕前的你的投票与我而言是宝贵的建议,我会吸收并之后优化文章,感谢你的反馈

本文链接地址:https://www.jiuchutong.com/zhishi/298820.html 转载请保留说明!

上一篇:使用 jQuery 为复选框设置“选中”(jqueryfor)

下一篇:【WebSocket 协议】Web 通信的下一步进化(websocket tcpsocket)

  • 产品经理如何写好一份年终总结(产品经理如何写简历)

    产品经理如何写好一份年终总结(产品经理如何写简历)

  • 提升网站四倍流量的外链引流技巧(提升网站四倍流量的方法)

    提升网站四倍流量的外链引流技巧(提升网站四倍流量的方法)

  • 鸿蒙怎么把应用变成卡片(鸿蒙怎么把应用移到sd卡)

    鸿蒙怎么把应用变成卡片(鸿蒙怎么把应用移到sd卡)

  • 华为手机怎么设置桌面锁屏(华为手机怎么设置下面的三个功能键)

    华为手机怎么设置桌面锁屏(华为手机怎么设置下面的三个功能键)

  • opporeno7是双扬声器吗(oppok7x是双扬声器)

    opporeno7是双扬声器吗(oppok7x是双扬声器)

  • 如何怎么设置微信锁屏密码(请问怎么设置微信)

    如何怎么设置微信锁屏密码(请问怎么设置微信)

  • 为什么在刷宝上不能发评论(刷宝为什么取不出来钱)

    为什么在刷宝上不能发评论(刷宝为什么取不出来钱)

  • 相机m是什么意思(相机m是什么意思手机)

    相机m是什么意思(相机m是什么意思手机)

  • DRAM与NAND的区别(dram和nand)

    DRAM与NAND的区别(dram和nand)

  • 拼多多好评返现封店吗(拼多多好评返现可以索赔500吗是真的吗)

    拼多多好评返现封店吗(拼多多好评返现可以索赔500吗是真的吗)

  • 三星s10有HiFi芯片吗(三星s10+的音质怎么样)

    三星s10有HiFi芯片吗(三星s10+的音质怎么样)

  • 苹果xr人脸识别不灵怎么办(苹果xr人脸识别突然用不了)

    苹果xr人脸识别不灵怎么办(苹果xr人脸识别突然用不了)

  • 三星w20是双卡还是单卡(三星w20是双卡双待)

    三星w20是双卡还是单卡(三星w20是双卡双待)

  • 华为畅享10plus充电快吗(华为畅享10plus充电多少瓦)

    华为畅享10plus充电快吗(华为畅享10plus充电多少瓦)

  • 手机通知铃声怎么改(手机通知铃声怎么改成自定义)

    手机通知铃声怎么改(手机通知铃声怎么改成自定义)

  • 如何查看本机手机号(如何查看本机手机号码红米)

    如何查看本机手机号(如何查看本机手机号码红米)

  • 小米6x什么时候更新miui11(小米8什么时候上市)

    小米6x什么时候更新miui11(小米8什么时候上市)

  • 快手如何置顶主页作品(快手咋置顶啊)

    快手如何置顶主页作品(快手咋置顶啊)

  • 交管12123重置密码(交管12123重置密码审核后会通知吗)

    交管12123重置密码(交管12123重置密码审核后会通知吗)

  • 华为p30屏幕供应商(华为p30的屏幕是哪个供应商提供的)

    华为p30屏幕供应商(华为p30的屏幕是哪个供应商提供的)

  • oppor17有闪付功能吗(oppo有没有闪付功能)

    oppor17有闪付功能吗(oppo有没有闪付功能)

  • vivoy93有指纹吗(vivo y93有指纹吗)

    vivoy93有指纹吗(vivo y93有指纹吗)

  • 猎豹安全大师如何卸载(猎豹安全大师怎么样)

    猎豹安全大师如何卸载(猎豹安全大师怎么样)

  • group policy client服务未能登录解决方法

    group policy client服务未能登录解决方法

  • 增值税电子专用发票需要盖章吗
  • 什么是一般公共财政预算收入
  • 购车增值税可以抵扣多少
  • 企业变更股东需要本人到场吗
  • 处置使用过的固定资产,税率按多少
  • 未发货先开票怎么结转成本
  • 税收完税证明怎么打印
  • 个人工资税收怎么申报
  • 柴油暂估入账
  • 企业所得税连续3年亏损预警自查报告
  • 只占股不出资
  • 公司投资股票有风险吗
  • 公司提供职工午餐违法吗
  • 公司抵扣发票不用交税吗
  • 消费税可以跨年计提吗
  • 增值税发票有哪些类型
  • 建安类增值税专用发票什么时候改的
  • 企业计提的工资薪金支出可以在税前扣除
  • 企业合并三种方式
  • 撤回和撤销是什么意思
  • 因腐败因素形成的损失企业所得税如何处理?
  • 样品寄送时运费支付的对策
  • 员工旅游计入什么费用
  • Mac怎么更改锁屏密码
  • 小企业执行新会计准则吗
  • 年末结转年初建账
  • php常用的优化方式
  • 广告费和业务宣传费15%还是30%
  • 参加活动获得的荣誉怎么写
  • php的转义字符反斜杠
  • 发财树的养殖方法和浇水视频
  • 图神经网络gat
  • 差额征税专用发票税额怎么算
  • 浏览器分析
  • 程序员神器
  • chatto
  • HTML 事件参考手册
  • 没有发票的支出可以扣除企业所得税么
  • 购买样品入库的账务处理
  • phpcms怎么用
  • 帝国cms灵动标签下拉框
  • mysql 小时差
  • 公司申请破产后债务谁来还
  • ms-sql-s
  • 建筑公司算不算企业
  • 固定资产的折旧账务处理
  • 以前年度损益调整怎么结转
  • 结转销项税额至未交增值税的结转系数
  • 公司与股东的往来款
  • 管理费用通俗理解
  • 个人账户打流水需要本人吗
  • 所有者权益的概念和特征
  • 采用现销方式销售商品的会计分录
  • 物流到付如何做账务处理
  • 明细分类账怎么打印
  • 获取sql
  • sql常见的数据类型有哪些
  • 通过备份记录获取文件
  • 当你感觉到你的win2000运行速度明显减慢
  • win7防火墙如何添加允许
  • xp怎么解压文件
  • ubuntu屏幕截图快捷键
  • Fedora Core 5.0 安装教程,菜鸟图文教程(linux text)
  • mac所有窗口最小化
  • qttask.exe是什么进程?qttask.exe是不是病毒?
  • ubuntu搭建vsftp
  • windows8鼠标没反应怎么办
  • 萝卜家园和番茄花园哪个好
  • Unity3D游戏开发pdf
  • 批处理命令在windows操作中的典型应用
  • css放大字体
  • [置顶]马粥街残酷史
  • jquery移动版
  • python计算文件大小
  • javascript面向对象编程指南
  • jQuery ajaxSubmit 实现ajax提交表单局部刷新
  • 陕西省地方税务局关于调整土地增值税预征率的公告
  • 税务行政部门有哪些
  • 上海退休核定表两种算法
  • 西安车辆购置税缴纳需要什么材料
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设