ajax宏任务,微任务/宏任务 实例详解

什么是宏任务 macroTask,什么是微任务microTask?

宏任务:setTimeout、setInterval, Ajax,DOM事件

微任务:Promise async/await

微任务执行时机比宏任务要早

宏任务、微任务和DOM渲染,在Event Loop的过程?

9fee6f4efc5ca430c1725baf92443104.png

$('#container').append($p1).append($p2).append($p3)

// 宏任务:DOM渲染后触发

setTimeout(() => {

console.log('length2', $('#container').children.length)//3

alert('setTimeout')//DOM 渲染了

});

// 微任务: DOM渲染前触发

Promise.resolve().then(() => {

console.log('length1', $('#container').children.length)//3

alert('Promise then') //DOM没渲染

});

// 执行顺序

// alert('Promise then')

// 渲染节点

// alert('setTimeout')

在Call Stack空闲时(即每次轮询结束),同步任务执行完

执行当前的微任务

尝试DOM渲染

触发 Event Loop,执行callback Queue里的宏任务

宏任务、微任务和DOM渲染的关系?【macro-micro2.js】

JS是单线程的,而且和DOM渲染共用一个线程

JS执行的时候,得留一下时机供ODM渲染

宏任务:DOM渲染后触发,如setTimeout

微任务:DOM渲染前触发,如Promise

为什么微任务执行时机比宏任务要早?

宏任务:DOM渲染后触发,如setTimeout

微任务:DOM渲染前触发,如Promise

微任务/宏任务的根本区别

微任务是ES6语法规定的,

遇到微任务(如Promise)时,

会等待时机放在 【micro task queue】 微任务队列

不会放在web API处理事件,因为Promise是ES规范,不是W3C规范

宏任务是由浏览器规定的,

遇到宏任务(如setTimout)时,

会放在web API 处理事件等待回调,因为setTimout是是W3C规范

回调后放在【callback queue】回调队列

等待Event Loop

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ajax (Asynchronous JavaScript and XML) 是一种在不刷新整个页面的情况下,使用 JavaScript 发起异步请求,获取或提交数据的技术。原生 Ajax 是指不依赖任何 JavaScript 框架或库,纯粹使用原生 JavaScript 实现 Ajax。下面是一个使用原生 Ajax 进行提交的实例详解。 首先需要创建一个 XMLHttpRequest 对象: ``` var xmlhttp; if (window.XMLHttpRequest) { // IE7+、Firefox、Chrome、Opera、Safari 浏览器执行代码 xmlhttp = new XMLHttpRequest(); } else { // IE6、IE5 浏览器执行代码 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } ``` 然后设置请求方式和请求地址: ``` var url = "submit.php"; // 提交的处理程序 var method = "POST"; // 提交的方式,可以是 GET 或 POST xmlhttp.open(method, url, true); // true 表示异步请求 ``` 接着设置请求头: ``` xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ``` 这里使用了 application/x-www-form-urlencoded 格式。如果需要提交 JSON 格式的数据,则设置为: ``` xmlhttp.setRequestHeader("Content-type", "application/json"); ``` 接下来设置回调函数: ``` xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // 请求成功,处理返回的数据 console.log(this.responseText); } }; ``` 当 readyState == 4 时,表示请求已完成;status == 200 表示请求成功。这里只是简单地输出了返回的数据,可以根据具体情况进行处理。 最后发送请求,提交数据: ``` var data = "name=John&age=18"; // 提交的数据,可以是表单数据或 JSON 数据 xmlhttp.send(data); ``` 这里提交了两个字段,name 和 age,可以根据实际情况修改。当使用 GET 方式提交时,数据需要拼接到 URL 中,例如: ``` var url = "submit.php?name=John&age=18"; xmlhttp.open("GET", url, true); xmlhttp.send(); ``` 以上就是使用原生 Ajax 进行提交的实例详解。需要注意的是,原生 Ajax 还需要处理一些兼容性和安全性问题,例如 IE6、7 下不能并发多个 Ajax 请求,跨域请求需要使用 JSONP 或设置 CORS 等。因此,如果条件允许,建议使用现代的 JavaScript 框架或库来简化 Ajax 的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值