JS异步编程

Author Avatar
NENEIIII Nov 25, 2022
  • Read this article on other devices

服务器

C/S架构

B/S架构

使用 WampServer 搭建 HTTP服务

静态网站和动态网站

静态网站:

  • 访问的是实实在在保存在服务器上的文件。静态资源包括:html页面、css文件、js文件、图片等。
  • 当内容、图片、界面需要更新时,直接修改.html文件。

动态网站:

  • 当用户访问网站时,根据某些逻辑,动态生成对应的HTML、CSS、JS代码给用户(这也就是web服务器开发的本质)。
  • 通过某种手段,当有新的消息时,自动的完成网站的更新。

总结:

由于静态网站在维护的局限性,所以产生了动态网站。

实现动态网站的技术:php/jsp/.net/python等。

动态网站的原理:浏览器请求动态网站的页面(比如*.php),php拼接数据并动态生成html页面,然后将新生成的页面返回给浏览器

PHP

自己看

异步

JavaScript 语言和执行环境是单线程。即同一时间,只能处理一个任务。

  • 同步任务:在主线程上排队执行的任务。只有前一个任务执行完毕,才能执行下一个任务。
  • 异步任务:不进入主线程、而是进入任务队列(Event Queue)的任务,该任务不会阻塞后面的任务执行。只有”任务队列”通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

==什么时候需要等待,就什么时候用异步==(因为需要等待的任务不能阻塞在主线程里)

  • 1、事件监听(比如说,按钮绑定点击事件之后,用户爱点不点。我们不可能卡在按钮那里,什么都不做。所以,应该用异步)
  • 2、回调函数:
    • 2.1、定时器:setTimeout(定时炸弹)、setInterval(循环执行)
    • 2.2、ajax请求。
    • 2.3、Node.js 中的一些方法回调。
  • 3、ES6 中的 Promise、Generator、async/await

执行顺序

img

可以看到异步任务要在主线程执行完同步任务之后再进行(不管它本身需要等待多久)

Ajax

在浏览器中,我们可以在不刷新页面的情况下,通过 Ajax 的方式去获取一些新的内容。

Ajax:Asynchronous Javascript And XML(异步 JavaScript 和 XML)。它并不是凭空出现的新技术,而是对于现有技术的结合。Ajax 的核心是 js 对象:XMLHttpRequest

发送 Ajax 请求的五个步骤:

(1)创建异步对象,即 XMLHttpRequest 对象。

(2)使用 open 方法设置请求参数。open(method, url, async)。参数解释:请求的方法、请求的 url、是否异步。第三个参数如果不写,则默认为 true。

(3)发送请求:send()

(4)注册事件:注册 onreadystatechange 事件,状态改变时就会调用。

如果要在数据完整请求回来的时候才调用,我们需要手动写一些判断的逻辑。

(5)服务端响应,获取返回的数据。

jQuery 中的 Ajax

JQuery 作为最受欢迎的 js 框架之一,常见的 Ajax 已经帮助我们封装好了,只需要调用即可。更为详细的 api 文档可以查阅:w3cSchool_JQueryAjax

格式举例:

$.ajax({
    url: 'https://xxx.com/getUserInfo.php', // 接口的请求地址
    data: 'name=fox&age=18', // 请求参数
    type: 'GET', //请求的方式
    success: function (argument) {
        // 接口请求成功时调用
        console.log('接口请求成功');
    },
    beforeSend: function (argument) {}, // 在发送请求之前调用,可以做一些验证之类的处理
    error: function (argument) {
        // 接口请求失败时调用
        console.log('接口请求失败');
    },
});

Promise

宏任务& 微任务