请教一下,ajax异步存在线程问题吗?

请教一下,ajax异步存在线程问题吗?

有没有共享一个变量出现线程问题。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,在浏览器中发送请求是这样的:

        1、在浏览器任务就被分成两种,一种是同步任务,一种是异步任务

        同步任务:只有前一个任务执行完成后,才可执行下一个任务,在主线程中

        异步任务:这个队列的所有任务都是不进入主线程执行,而是被浏览提供的线程执行。当执行完毕后就会产生一个回调函数,并且通知主线程,在主线程执行完当前所执行的任务后,就会调取最早通知自己的回调函数,使其进入主线程中执行,比如ajax请求,在主线程中呈现的就是请求结果~

        2、如上所述,浏览器中请求的执行顺序就是:

            (1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
            (2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件(回调函数callback)。
            (3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",查看里面有哪些事件,结束等待状态,进入执行栈,开始执行对应的异步任务。

            (4)最后主线程就是不断重复上面的第三步。

如上所述就是-->异步请求在浏览器中的执行过程,所以说异步请求都是在同步请求执行完成后,再去发送请求访问服务器,所以这些请求都是按照顺序来依次执行的,并不会出现同学所说的"先处理了后台数据A,这时候异步读取后台数据A" 这样的情况。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2019-12-24 13:43:22

同学你好,因为JavaScript本身是不支持多线程技术的,Ajax属于JavaScript范畴,因此Ajax是单线程的。

同学所说的"有没有共享一个变量出现线程问题" ,老师并没有理解同学的意思,还麻烦同学具体描述一下。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 小蝴蝶噼里啪啦 #1
    就是ajax不是可以异步处理么,这时候浏览器是又开了一个线程么?不然怎么实现的异步处理。然后如果是这样,那会不会存在我先处理了后台数据A,这时候异步读取后台数据A。会不会存在我数据还没处理完我就已经读完了A数据。
    2019-12-24 20:43:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师