当前位置:   article > 正文

AJAX学习日记——Day 3

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('<br>');
  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. <!DOCTYPE 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('<br>'));
  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 `<option class="area">${item}</option>`})
  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. 当调用栈空闲后,反复调用任务队列中的回调函数
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/249002
推荐阅读
相关标签
  

闽ICP备14008679号