ajax+异步promise+async+await

2023-11-04

ajax是什么? 为什么要学?

ajax=异步js+xml,ajax实现客户端和服务端进行异步通信,实现页面的局部更新。

好处:
  1. 局部刷新,用户体验好
  2. 异步通信,加快了响应能力
  3. 减少冗余请求,减轻了服务器负担。
ajax原理就是:

通过xml对象向服务端发送异步请求,获取数据,通过js操作dom更新页面。

原生js ajax请求有几个步骤?分别是什么

//创建xmlhttprequest对象 

  • const ajax = new XMLHttpRequest()

//设置请求类型、地址、是否异步

  • ajax.open('get',url,true)

//发送请求

  • ajax.send()

//设置响应请求状态变化的函数

  • ajax.onreadystatechange=function(){

if(ajax.readyState==4 && ajax.status==200)

}

readyState存储xmlhttprequest的状态

0未初始化

1服务器建立链接

2请求已接收

3请求处理中

4 请求已完成

拓展:

get/post区别
  1. get不安全,数据被显示在url中,post安全,不可见
  2. get传送数据少,post可传输大量数据
  3. get执行效率好 
 异步:

javascript是一门单线程语言,即一次只能完成一个任务,若有多个任务要执行,则必须排队按照队列来执行(前一个任务完成,再执行下一个任务)。

弊端:

执行效率低,会陷入死循环中,导致整个页面卡住。

为了解决这个问题,js将任务执行模式分为同步和异步。

异步任务是指不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程,当我们打开网站时,像图片的加载,音乐的加载,其实就是一个异步任务

 定时器、ajax请求、异步函数都是异步

前端异步解决方案:

1.promise

简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作。

 

new Promise(
    /* executor */
    function(resolve, reject) {
        if (/* success */) {
            // ...执行代码
            resolve();
        } else { /* fail */
            // ...执行代码
            reject();
        }
    }
);

异步对象的状态:

  • pending:初始状态,也称为未定状态,就是初始化Promise时,调用executor执行器函数后的状态。
  • fulfilled:完成状态,意味着异步操作成功。
  • rejected:失败状态,意味着异步操作失败。
promise的api方法: 
  • promise.then()
  • promise.catch()
  • promise.all() 接收一个参数,它必须是可以迭代的
    Promise.all([p1,p2])
     .then(()=>console.log('done'))
  •  promise.race() Promise.race()的状态变化不是全部受参数内的状态影响,一旦参数内有一个值的状态发生的改变,那么该Promise的状态就是改变的状态
    Promise.race([p1, p2, p3]).then(function(data) {
      // 显然p2更快,所以状态变成了fulfilled
      // 如果p3更快,那么状态就会变成rejected
      console.log(data); // p2 doned
    }).catch(function(err) {
      console.log(err); // 不执行
    });
  • promise.resolve() 
  • promise.reject()
  • var p10 = Promise.reject('手动拒绝');
    p10.then(function(data) {
      console.log(data); // 这里不会执行,因为是rejected态
    }).catch(function(err) {
      console.log(err); // 手动拒绝
    }).then(function(data) {
     // 不受上一级影响
      console.log('状态:fulfilled'); // 状态:fulfilled
    });
  • 总之,除非Promise.then()方法内部抛出异常或者是明确置为rejected态,否则它返回的Promise的状态都是fulfilled态,即完成态,并且它的状态不受它的上一级的状态的影响。

2.generator函数

  • 在function关键字后加一个* , 那么这个函数就称之为generator函数
  • 函数体有关键字 yield , 后面跟每一个任务 , 也可以有return关键字, 保留一个数据
  • 通过next函数调用, 几个调用, 就是几个人任务执行 

 

function* showWords() {
    yield 'one';
    yield 'two';
    return 'three';
}

var show = showWords();

show.next() // {done: false, value: "one"}
show.next() // {done: false, value: "two"}
show.next() // {done: true, value: "three"}
show.next() // {value: underfined, done: true}

3.async await 

 函数前面的async一词意味着一个简单的事情:这个函数总是返回一个promise,如果代码中有return <非promise>语句,JavaScript会自动把返回的这个value值包装成promise的resolved值。

还有另一个关键词await,只能在async函数里使用,等待promise执行结束返回结果,才开始执行。

函数执行到(await)行会‘暂停’,不再往下执行,当promise处理完成后重新恢复运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax+异步promise+async+await 的相关文章

随机推荐

  • 数据结构图的邻接矩阵存储及深度广度优先搜索

    include
  • VSCOCE远程连接服务器的一次错误记录

    VSCOCE远程连接服务器的一次错误记录 记录这个问题的目的是希望能帮助到遇到相同问题的人 自己也留个记录 背景 这个问题的背景是这样的 工作当中android源码是放在公司服务器上的 这样看代码就不是很方便 于是就是用了VSCODE的ss
  • 刷脸支付在新零售行业线上线下加速融合

    以线上线下融合为特点的新零售一定是未来的趋势 而时至今日 马云的新零售概念俨然是当下资本市场最热门的风口 无论是电商大鳄 还是传统商超 创业公司 都在抢先布局这块市场 新零售的概念即企业以互联网为依托 通过运用大数据 人工智能等先进技术手段
  • EduCoder_web实训作业--JavaScript 学习手册二:JS 数据类型

    欢迎大家关注 转发 加推荐给身边的同学啊 第一关 请在此处编写代码 Begin aType typeof a bType array cType typeof c dType typeof d eType bool fType typeof
  • kubernetes-1.25.6 二进制部署

    目录 1 基础环境 2 基础环境配置 2 1 所有节点配置hosts 2 2 关闭防火墙 selinux dnsmasq swap 2 3 配置时间同步 2 4 节点修改资源限制 2 5 安装基本软件 2 6 升级系统内核 2 7 修改内核
  • 半监督目标检测

    一 Soft Teacher 1 超实用半监督目标检测 Soft Teacher 及 MMDetection 最强代码实践 2 3 GitHub上mmdetection上有一个关于SSOD这个的教程 SSOD tutorial 4 配置mm
  • unity 保存场景数据,读取场景

    原文链接 http www cnblogs com qq2351194611 p 11310159 html 一共两个脚本 一个保存的 一个读取的 下面会附上代码 网上都有 这个只是方便自己用 这是保存的脚本 放到Editor文件夹下即可
  • 数据清洗:由坐标数据构成的轨迹去除漂移点的操作

    版权声明 转载请注明作者 独孤尚良dugushangliang 出处 https blog csdn net dugushangliang article details 102821219 先看看我们要处理的数据 首先根据点的经纬度数值
  • uos的linux内核版本,在UOS 20或Deepin系统中安装Linux 5.5.0版本内核

    本文介绍的安装Linux 5 5版本内核方法可用在UOS 20或Deepin系统中 内核类型为generic 适用于x86 64架构计算机 Linux 5 5更新详情 Linux 5 5内核发布下载 附新功能及新特性介绍 下载Linux 5
  • 谷歌携Blink来势汹汹 WebKit将成明日黄花?

    原文地址 http www csdn net article 2013 04 09 2814815 Google近日宣布将为Chrome浏览器开发新的自主渲染引擎Blink 与WebKit分道扬镳 随后Opera宣称将追随Google 放弃
  • 主流数据库之间对SQL:2003标准的不同实现方法比较(第四部分 查询结果集中间n行数据)

    本文严禁在未征得本人同意的情况下以任何形式进行转载 本人只接受在邮件中的转载申请 如需转载 请发送邮件至 betteryou 126 com 带有偏移量的限制 目标 仅需要结果集中的n行数据 并试图忽略前面m行的数据 通常只在有ORDER
  • 程序员看世界杯

    目录 1 世界杯赛事规则 1 1 赛制 1 2 小组赛 1 3 淘汰赛阶段 1 4 1 8决赛 1 5 半决赛 1 6 决赛 2 大力神杯材质 3 看球心德 4 2022大力神杯赢家 1 世界杯赛事规则 1 1 赛制 世界杯一共进行64场
  • pytorch基本使用_01

    import torch import numpy as np string 在torch中对string不支持 1 可以通过向量one hot来进行分类 2 embedding word2vec glove type check a to
  • 利用nodemcu和mqtt协议让嵌入式设备接入互联网(二.nodejs的安装和配置)

    文章目录 前言 nodejs nvm和nodejs的安装 npm的相关配置 配置npm的global和cache路径 配置npm仓库为国内淘宝镜像 npm下载相关依赖包 npm初始化项目 安装相关依赖包 前言 第一篇讲了怎么用layui做H
  • 在Sonar中配置license和copyright的检查

    现在开源代码越来越多 代码头部的license和copyright信息在开发中容易被遗忘 那么就有必要做一些相关的检查 例如在持续集成CI中加入这方面的检查 当然 目前有很多集成在IDE中的工具来自动添加license和copyright信
  • 区间查询(树状数组之差点问线问题)

    1110 区间查询 时间限制 2 Sec 内存限制 32 MB 提交 162 解决 62 提交 状态 题目描述 食堂有N个打饭窗口 现在正到了午饭时间 每个窗口都排了很多的学生 而且每个窗口排队的人数在不断的变化 现在问你第i个窗口到第j个
  • selenium自动化测试入门 浏览器多窗口切换

    有时web应用会打开多个浏览器窗口 当我们要定位新窗口中的元素时 我们需要将webDriver的handle 句柄 指定到新窗口 什么意思 假设我们打开web应用 在系统运行过程中重新打开一个新窗口 可以是页签 当前浏览器存在两个窗口 这时
  • 宋浩概率论笔记(四)数字特征

    本帖更新数字特征 包含期望 方差 相关系数等 要点在于记忆性质中的各种公式 遇到题目时能迅速利用已知条件计算答案
  • (超详细)单臂路由及操作步骤

    目录 一 前提引入 二 单臂路由概述 2 1概念 2 2单臂路由优点 2 3单臂路由子接口 三 链路类型 四 单臂路由的配置实例 4 1拓扑图 4 2交换机的配置 4 3路由器的配置 4 4主机的配置 4 5连通性测试 五 总结 一 前提引
  • ajax+异步promise+async+await

    ajax是什么 为什么要学 ajax 异步js xml ajax实现客户端和服务端进行异步通信 实现页面的局部更新 好处 局部刷新 用户体验好 异步通信 加快了响应能力 减少冗余请求 减轻了服务器负担 ajax原理就是 通过xml对象向服务