javascript - AJAX是怎么样实现异步的呢?

php中文网
发布: 2016-06-06 20:07:01
原创
1272人浏览过

ajax的方法源码我看过,就是ajax方法里面调用一个回调,先执行ajax方法再执行回调,这跟普通的的引用函数 有什么区别呢?那么ajax的异步回调在体验在哪里;

回复内容:

ajax的方法源码我看过,就是ajax方法里面调用一个回调,先执行ajax方法再执行回调,这跟普通的的引用函数 有什么区别呢?那么ajax的异步回调在体验在哪里;

上面几位真是所答非所问。
首先浏览器的js引擎是单线程的,执行一个耗时操作必定阻碍线程后续代码的执行(比如等待网络请求的响应)。一些语言采用了开一个子线程并把耗时操作放到子线程去执行的办法解决了这个问题。
js引擎本身不支持多线程,但是浏览器基本上都有三个线程:js引擎线程、事件触发线程、http请求线程。后两个线程在触发后会把对应的回调函数放到js引擎线程的执行队列中进行排队等待,只要js引擎线程空闲就会依次执行加入到队列中的回调函数。当然这些回调函数的执行依然是阻碍线程的。

页面无刷新进行数据请求,返回数据通过js操作DOM,用户体验良好;单纯调用js函数仅对前端有操作,没有与服务器的交互;AJAX是组合技术,提升用户体验,不必每次请求都刷新整个页面,即js操作dom进行局部刷新

在我看来本质上没有区别,一个传入函数,一个是类似面向对象中我多态覆盖(执行默认或者自定义覆盖的)

立即学习Java免费学习笔记(深入)”;

  1. 传引用
    比如:
    // 获取用户数据
    function getDate() {
    }

    // 登陆
    function login(cb) {

       // 登陆逻辑....
       // 登陆成功后执行回调引用
       if (cb && typeof cb === 'function') {
           cb();
       }
    登录后复制

    }

    login(getDate);

  2. ajax内部可能实现(不确保是这样的,只是模拟一下)

    音疯
    音疯

    音疯是昆仑万维推出的一个AI音乐创作平台,每日可以免费生成6首歌曲。

    音疯 178
    查看详情 音疯

    function XMLHttpRequest() {
    }

    // 可以有默认的也可以没有,没有在send回调执行时判断一下就行了
    XMLHttpRequest.prototype.onreadystatechange = function () {};

    XMLHttpRequest.prototype.get = function (url) {

       this.url = url;
    登录后复制

    };

    XMLHttpRequest.prototype.send = function () {

       // 发送http请求,修改readyState等
       // 从this.url获取数据
       // 适时调用onreadystatechange, 没有默认onreadystatechange时判空
       if (this.onreadystatechange &&
           typeof this.onreadystatechange === 'function') {
           this.onreadystatechange();
       }
    登录后复制

    };

    var ajax = new XMLHttpRequest();
    ajax.get(url);
    ajax.onreadystatechange = function () {

       // 覆盖默认的,或者没有默认的话重新定义
    登录后复制

    };
    ajax.send();

你换成2G网络就能看出区别了 请求慢的时候下面的代码会继续执行 如果用同步 就干等着吧

相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号