• day27--AJAX(bootstrap之modal,toast;接口文档的一些用法;AJAX原理)


    目录

    Bootstrap之Modal:

    显示和隐藏方法

    通过自定义属性:

    使用JS来控制弹框:

    Bootstrap之Toast:

    接口文档一些用法:

    删除图书:

    图片上传:

    图片上传步骤:

    修改头像:

    AJAX原理:

    使用XHLHTTPREQUEST四步走:

    XHLHTTPREQUEST--查询参数:

    XHLHTTPREQUEST--请求参数:

    Promise:

    Promise三种状态:

    封装简易axios

    Bootstrap之Modal

    Modal 模态 (弹框)

    功能:不离开当前页面,显示单独内容,供用户操作


      


      

    显示和隐藏方法

    通过自定义属性

    查询Bootstrap官网可知,通过给按钮添加自定义属性即可实现弹框的显示和隐藏;

    但是这种显示和隐藏就是单纯的点击就显示或者隐藏,不能有其他功能。要实现点击按钮执行了某些功能再显示或隐藏,需要用到JS来控制显示隐藏。

    使用JS来控制弹框:

    显示myModal.show()

    隐藏myModal.hide()

    Bootstrap之Toast

    显示与modal提示框一样,可以通过属性或者JS的方式来显示。

    接口文档一些用法:

    删除图书:

    请求参数来路径上,路径上的是图书的id.

    图片上传:

    请求参数是form-data,需要借助JS内置构造函数FormData()

    图片上传步骤:

    1. 准备文件类型的input标签用来上传

    2. 给文件绑定改变事件,即一旦有图片上传则会引起改变

    在此点击事件中,找到图片专属的file对象这个在服务器中需要使用 ←  e.target.files[0] 

    3. 创建图片专属的form-data

    1. const fd = new FormData()
    2. fd.append('img',e.target.files[0])

    4. 上传至服务器,获取图片专属url:

    1. axios({
    2. url:'http://hmajax.itheima.net/api/uploadimg',
    3. method:'POST',
    4. data:fd
    5. }).then((result)=>{
    6. //图片的url
    7. result.data.data.url
    8. })

    修改头像:

    步骤:类似图片上传

    文件选择元素 -> change事件 -> 获取头像file -> 创建头像fd(这里与图片不同 见下) ->拿到头像url->返回给头像标签

    AJAX原理:

    axios内部有XHR 前面就因为此而实现的交互,但是实际中可能只需要用到XHR这几行代码,这时候就不需要引入axios了

    使用XHLHTTPREQUEST四步走:

    axios 在返回的时候会把JSON字符串转成对象再进行返回,是因为内部有转换的代码,实际上拿到的xhr.response是JSON字符串。

    XHLHTTPREQUEST--查询参数:

    参数对象 →  查询对象 →  查询字符串

    1. // 要查询的对象
    2. const Obj = {
    3. 参数名1:值1
    4. 参数名2:值2
    5. }
    6. // 1. 创建URLSearchParams对象,将要查询的对象转为→ url查询参数对象
    7. const paramsObj = new URLSearchParams(Obj)
    8. // 2. 生成指定格式查询参数字符串
    9. const queryString = paramsObj.toString() //结果: 参数名1=值1&参数名2=值2


    XHLHTTPREQUEST--请求参数:

    请求参数在请求体中

    1. // 构造请求头
    2. xhr.setRequestHeader('Content-Type','application/json')
    3. // 由请求头可知,传入的请求体必须为JSON字符串,因此要准备请求体对象 → 请求体JSON字符串
    4. // 由此也可知,为什么axios中只需要传入请求体对象,因为内部会将其转化为JSON字符串
    5. const data = {
    6. username:'lili',
    7. password:888888
    8. }
    9. const userStr = JSON.stringify(user)
    10. //发送请求体
    11. xhr.send(userStr)

    Promise:

    表示一个管理异步操作最终状态和结果值的对象

    //resolve(a) 会将a作为then(result=>{})中的result传递过去

    //reject(a) 会将a作为catch(err=>{})中的err传递过去

    eg:

    1.  /**
    2.      * 目标:使用Promise管理异步任务
    3.     */
    4.     const p = new Promise((resolve, reject) => {
    5.       // 执行异步任务
    6. //如果成功执行,则会调用resolve()函数,从而触发then()执行,
    7. //若失败则会调用reject()函数,从而触发catch()执行
    8.       setTimeout(() => {
    9.         // resolve('成功调用')
    10.         reject(new Error('调用失败'))
    11.       }, 2000)
    12.     })
    13. console.log(p) //可以得到promise状态码
    14.     p.then((result) => {
    15.       console.log(result)
    16.     }).catch((err) => {
    17.       console.log(err)
    18.     })
    Promise三种状态:

    Promise对象创建时,代码就会执行了,异步代码的fulfilled状态兑现(在执行resolve()时会兑现)则执行then();异步代码的rejected状态兑现(在执行reject()时会兑现)则执行catch()。

    // 状态码一旦兑现(已拒绝或已兑现) 就不会改变

    封装简易axios

    1. // 1. 定义myAxios函数,接收配置对象,返回Promise对象
    2. function myAxios(config) {
    3. return new Promise((resolve, reject) => {
    4. // 2. 发起XHR请求
    5. const xhr = new XMLHttpRequest()
    6. // 3. 判断有无params选项,携带查询参数
    7. // 此判断要写在url之前,因为会改变到url,使用URLSearchParams转换,转化为指定格式
    8. if (config.params) {
    9. const paramsObj = new URLSearchParams(config.params)
    10. const queryString = paramsObj.toString()
    11. // 创建完查询参数后,还需将其放入url中
    12. // 4.携带到url上
    13. config.url += `?${queryString}`
    14. }
    15. //默认请求方法为GET
    16. xhr.open(config.method || 'GET', config.url)
    17. xhr.addEventListener('loadend', () => {
    18. // 3. 调用成功/失败的处理程序v
    19. if (xhr.status >= 200 && xhr.status < 300) {
    20. resolve(JSON.parse(xhr.response))
    21. } else {
    22. reject(new Error(xhr.response))
    23. }
    24. })
    25. // 4. 判断有data选项,携带请求体
    26. if (config.data) {
    27. // 请求体转化为json字符串
    28. const jsonStr = JSON.stringify(config.data)
    29. // 设置请求头
    30. xhr.setRequestHeader('Content-Type', 'application/json')
    31. xhr.send(jsonStr)
    32. } else { xhr.send() }
    33. })
    34. }
    35. //调用
    36. document.querySelector('.reg-btn').addEventListener('click', () => {
    37. myAxios({
    38. url: 'http://hmajax.itheima.net/api/register',
    39. method: 'POST',
    40. data: {
    41. username: '你是我的小苹果oppp',
    42. password: '66668896'
    43. }
    44. }).then(result => {
    45. console.log(result)
    46. }).catch(err => {
    47. console.dir(err)
    48. })
    49. })
  • 相关阅读:
    人大金仓分析型数据库使用之创建和管理表空间
    前端进击笔记第二节 重识 HTML,掌握页面基本结构和加载过程
    你的Edge浏览器难道不需要一个好看的浏览器起始页嘛
    电子协会 C语言 1级 33 、奇偶数判断
    速卖通API接口解析,实现获得aliexpress商品详情
    北京十大知名律师事务所排名(市场调研前十)
    iview tree树形菜单实践之渲染模式
    go 包的引入
    数字取证对有效企业事件响应的重要性
    【stack题解】最小栈 | 栈的压入、弹出序列
  • 原文地址:https://blog.csdn.net/cuier520/article/details/133789707