• AJAX学习日记——Day 3


    一、XHR

            1、四步使用

                    (1)创建对象

                    (2)配置请求方法和请求url地址

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

                    (4)发出请求

    1. const xhr =new XMLHttpRequest()
    2. xhr.open('请求方法','请求url网址')
    3. xhr.addEventListener('loadend',() => {
    4. //loadend:无论成功或失败,都会执行
    5. //响应结果
    6. console.log(xhr.response)
    7. })
    8. xhr.send()
    9. 实例:
    10. const xhr = new XMLHttpRequest()
    11. xhr.open('GET','http://hmajax.itheima.net/api/province');
    12. xhr.addEventListener('loadend',() => {
    13. const data = JSON.parse(xhr.response);
    14. console.log(data.list);
    15. document.querySelector('.my-div').innerHTML = data.list.join('
      '
      );
    16. })
    17. xhr.send()

    二、URLSearchParams

            1、用处

                    将参数对象转为查询对象

            2、语法

    1. 1、创建URLSearchParams对象
    2. const paramsObj = new URLSearchParams({
    3. 参数名1:值,
    4. ...
    5. })
    6. const queryString = paramsObj.toString()

    三、setRequestHeader

            1、用处

                    用作请求头里说明数据类型

            2、语法

    1. 1、说明类型
    2. xhr.setRequestHeader('Content-Type','application/json')
    3. 2、实例
    4. document.querySelector('.reg-btn').addEventListener('click', () => {
    5. const xhr = new XMLHttpRequest();
    6. xhr.open('post','http://hmajax.itheima.net/api/register');
    7. xhr.addEventListener('loadend',() => {
    8. console.log(xhr.response);
    9. })
    10. xhr.setRequestHeader('Content-Type','application/json');
    11. const user = {username:'itheima237',password:'7654321'};
    12. const userStr = JSON.stringify(user);
    13. xhr.send(userStr);
    14. //发出请求
    15. })

    四、Promise

            1、用处

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

            2、语法

    1. //1、创建Promise对象
    2. const p = new Promise((resolv,reject) => {
    3. //2、执行异步任务,并传递结果
    4. //成功调用:resolve,触发then()
    5. //失败调用:reject,触发catch()
    6. })
    7. p.then(result => {
    8. }).catch(error => {
    9. })

    五、XHR综合使用

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>封装_简易axios函数_获取省份列表title>
    8. head>
    9. <body>
    10. <script>
    11. /**
    12. * 目标:封装_简易axios函数_获取省份列表
    13. * 1. 定义myAxios函数,接收配置对象,返回Promise对象
    14. * 2. 发起XHR请求,默认请求方法为GET
    15. * 3. 调用成功/失败的处理程序
    16. * 4. 使用myAxios函数,获取省份列表展示
    17. */
    18. function myAxios(config){
    19. return new Promise((resolve,reject)=>{
    20. const xhr = new XMLHttpRequest();
    21. if(config.params){
    22. //params是查询参数,用于url中?后
    23. const paramsObj = new URLSearchParams(config.params);
    24. //URLSearchParams用来获取params
    25. const queryString = paramsObj.toString();
    26. //需要转换成字符串
    27. config.url += `?${queryString}`
    28. }
    29. xhr.open(config.method || 'GET', config.url);
    30. xhr.addEventListener('loadend',() => {
    31. if(xhr.status >= 200 && xhr.status <300)
    32. {
    33. resolve(JSON.parse(xhr.response));
    34. }
    35. else{
    36. reject(new Error(xhr.response))
    37. }
    38. })
    39. if(config.data)
    40. {
    41. xhr.setRequestHeader('Content-Type','application/json');
    42. //设置请求头
    43. const userStr = JSON.stringify(config.user);
    44. //将请求数据转换成JSON字符串
    45. xhr.send(userStr);
    46. //请求
    47. }
    48. else
    49. {
    50. xhr.send();
    51. }
    52. })
    53. }
    54. myAxios({
    55. url:"http://hmajax.itheima.net/api/register",
    56. data:{
    57. username:'itheima007',
    58. password:'7654321',
    59. }
    60. }).then(result => {
    61. console.log(result.list.join('
      '
      ));
    62. }).catch({
    63. })
    64. script>
    65. body>
    66. html>

    六、同步代码和异步代码

            1、定义

    1. 1、同步代码:同步代码是按照书写顺序一行一行地执行程序的,浏览器会等待代码的解析和工作
    2. 2、异步代码:在一个程序长期运行的同时,继续对其他事件做出反应而不必等待任务完成,在有结果后触发一个回调函数

    七、Promise-链式调用

    1. 1、概念:依靠then()方法会返回一个新生成的Promise对象的特性,继续串联下一环任务
    2. 2、作用:防止回调函数地狱

    示例:

    八、async函数和await

            1、定义:

    1、定义:可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise()

            2、语法:

    1. 1、用async修饰函数,可以使函数变成异步函数
    2. 2、再用await修饰axios对象
    3. 3、概念:用await取代了then函数,等待获取Promise对象成功状态的结果值
    4. 示例:
    5. async function getData(){
    6. const pObj = await axios({url:'http://hmajax.itheima.net/api/province'});
    7. const pname = pObj.data.list[0];
    8. const cObj = await axios({url:`http://hmajax.itheima.net/api/city`,params:{pname}})
    9. const cname = cObj.data.list[0];
    10. const aObj = await axios({url:'http://hmajax.itheima.net/api/area',params:{pname,cname}})
    11. const alist = aObj.data.list;
    12. const aname = alist.map(item => {return ``})
    13. console.log(aname);
    14. document.querySelector('.province').innerHTML = pname;
    15. document.querySelector('.city').innerHTML = cname;
    16. document.querySelector('.area').parentNode.innerHTML = aname;

    九、async/await 捕获错误

            1、使用:try...catch

            2、语法

    1. 1、语法
    2. try{
    3. //检测代码
    4. }catch(error){
    5. //错误则执行
    6. }

    十、事件循环

            1、定义

    1. 1、定义:
    2. 执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制()
    3. 2、执行方式:
    4. 首先执行同步代码,遇见异步代码时,交给宿主浏览器环境执行
    5. 当异步有了结果,先将回调函数放进任务队列
    6. 当调用栈空闲后,反复调用任务队列中的回调函数
  • 相关阅读:
    23种设计模式(二十)命令模式(阁瑞钛伦特软件-九耶实训)
    Docker:数据卷(Data Volumes)&dockerfile
    6.云原生-KubeSphere3.3.0安装MYSQL
    GFD563A102 3BHE046836R0102 只读存储器本质上是非易失性的
    sql注入
    PIMPL技巧
    MySQL的预编译入门
    跨境电商系统商城源码定制开发的优势与需求
    气相催化还原二氧化硫影响因素实验研究
    Induced AI:一个专门为自动化任务而设计的AI原生浏览器RPA平台
  • 原文地址:https://blog.csdn.net/Lin_Zhong_/article/details/136625178