自用Ajax笔记

应用:多少条评论 用户名已存在
局部 异步刷新

1、 域名ip和端口关系

在这里插入图片描述

获得域名,先读取hosts文件,读取ip和域名映射关系的文件,如果没有映射关系就经过DNS域名解析服务器,查询对应的ip地址,返回地址给个人电脑,用这ip经过电信路由器询问路由表,找到QQ服务器的端口,端口区分比如聊天、网页、邮箱服务
www.baidu.com:80网页服务

2、 协议

HTTP、HTTPS 超文本传输协议
FTP文件传输协议
SMTP简单邮件传输协议
在HTTP协议中,需要大致了解的是:请求头、响应头、请求体、响应体。
通信协议就是计算机交流时事先约定的规则

3、 PHP

无论是变量的声明还是变量的使用都需要用$符号
字符串拼接用.
在这里插入图片描述

浏览器无法解析php
echo后面只跟字符串
print_r和var_dump输出更复杂的
echo json_ encode($arr);//将数组转化为json格式的字符串
在这里插入图片描述

异步机制,就是单线程加事件队列
settimeout只做了一件事就是放进队列,然后就往下执行了。
事件队列存放回调函数,包括一些on函数

在这里插入图片描述

异步,同步就没有下面的步骤
xml体积太大,传输慢,元数据太多,解析不方便

4、 跨域

协议、域名、端口号相同,同源策略。ajax可以获取数据
那我们需要处理获取非同源数据获取的情况吗?答案是肯定的。因为前端界面访问非同源的服务器的这种需求是非常常见的,比如在前端界面中获取天气数据,天气数据肯定是存在于别人的服务器上的,我们如果不能使用ajax.进行访问的话,那么该怎么办呢﹖这里就需要使用到跨域了。
Ajax是为了访问自己服务器的数据,跨域是为了访问别人服务器的数据。
script的src属性不受同源策略限制
跨域的本质①引入外部js②引入外部php③动态创建script
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码文件里有更灵活的

5、 jQuery

https://www.w3school.com.cn/jquery/ajax_ajax.asp
在这里插入图片描述
最后一行可以不写

在这里插入图片描述

jQuery的ajax方法的dataType在text xml json情况下会使用同源地址下数据
如果是jsonp就会动态创建script

6、 三种情况

1自己服务器 Ajax四个步骤
2第三方接口jsonp格式 动态创建script跨域
3第三方接口json格式
了解一下,这算后端

在这里插入图片描述

JSON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来传输的)json必须使用双引号
在这里插入图片描述
传送的其实是字符串
在这里插入图片描述

JSON.parse(str); string — > json
JSON.stringify(str); json — > string

eval()这个函数可以用来执行一段字符串形式的JS代码,并将执行结果返回

如果使用eval()执行的字符串中含有{,它会将{当成是代码块
如果不希望将其当成代码块解析,则需要在字符串前后各加一个()
在这里插入图片描述
万一用户传

在这里插入图片描述
在这里插入图片描述

降低效率两种情况
reflow重排(多):
dom节点的删除,添加
dom节点的宽高变化,位置变化,display none—> block
offsetWidth offsetLeft
repaint重绘(少):比如字体颜色(字体宽高大小是重排)

js之前是同步加载
为什么js的下载执行和HTMLcss不能并行?js会修改html和css
为什么js是单线程?假设多线程,一个线程增加结点,一个线程删去结点
手机留白加载的都是js

异步加载js,同时并行下载htmlcss
js加载的缺点:加载工具方法没必要阻塞文档,过得js加载会影响页面效率,一旦网速不好,那么整个网站将等待js加载而不进行后续渲染等工作。
有些工具方法需要按需加载,用到再加载,不用不加载。

javascript 异步加载的三种方案
1.defer 异步加载,但要等到dom文档全部解析完(树构建完,一定发生在页面加载完成之前)才会被执行。只有IE能用。defer有推迟的意思
属性名等于属性值写个属性名就行

2.async 异步加载,加载完就执行,async只能加载外部脚本,不能把js写在script 标签里。W3C。asychoronous
1和2 执行时也不阻塞页面
3.创建script,插入到DOM中,加载完毕后callBack。function asyncLoaded

js加载时间线
1、创建Document对象,开始解析Web页面;此阶段document.readyState = ‘loading’;
2、遇到link外部css,创建创建线程加载,并继续解析文档;
3、遇到script外部js,并且没有设置async、defer,浏览器加载并阻塞,等待js加载完成并执行该脚本,继续解析文档;
4、遇到script外部js,并且设置有async、defer,浏览器创建线程,并继续解析文档;
对于async属性脚本,脚本加载完成后立即执行(异步禁止使用document.write();另外,它在整个文档全部加载完毕之后,能消除文档流,甚至于把都删了)
5、遇到img等,先正常解析dom结构,然后浏览器异步加载src,并继续解析文档;
6、当文档解析完成,document.readyState = ‘interactive’;
7、文档解析完成后,所有设置有defer的脚本会按照顺序执行。(注意defer与async的区别);
8、document对象触发DOMContentLoaded事件,这也标志着程序执行从同步脚本执行阶段,转化为事件驱动阶段;↓事件dom解析完再执行函数体
在这里插入图片描述
只在addlistener上好使
9、当所有async的脚本加载完成并执行后,img等加载完成后,document.readyStste = ‘complete’,window对象触发load事件;
10、从此,以异步响应方式处理用户输入,网络事件等;

①创建Document对象②解析③加载执行
在这里插入图片描述

打印出loading
interactive是解析完,形成dom树,但是要等结束后才能interactive,render树才一半
在这里插入图片描述
complete
在这里插入图片描述
在这里插入图片描述

控制台的二三行并行发生
js代码写在最下面的好处?https://www.jianshu.com/p/454f63169bff
在这里插入图片描述

而window.onload是等到所有东西加载完再执行

Asynchronous JavaScript & XML
不需要重新刷新当前页面
在这里插入图片描述

XmlHttpRequest对象类型API

onload只有4,onreadyState有2、3、4
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/s8806479/article/details/115211333
今日推荐