西安分院:马扬睿
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
简单来说
就是没使用AJAX的网页,你点一个按钮就要刷新一下整个页面,尽管新页面上只有一行字和当前页面不一样,但你还是要无聊地等待页面刷新
用了AJAX之后,你点击,然后页面上的一行字就变化了,页面本身不用刷
AJAX只是一种技术,不是某种具体的东西。不同的浏览器有自己实现AJAX的组件
传统的网页想要更新内容或者提交一个表单,需要重新载入整个页面,而运用了ajax技术的网页 通过和后台进行少量的数据交换,网页就可以异步更新
同步请求即是当前发出请求后,浏览器什么都不能做,必须得等到请求完成返回数据之后,才会执行后续的代码,相当于是排队,前一个人办理完自己的事务,下一个人才能接着办。也就是说,当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面处于一个假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面解除假死状态(即当ajax返回数据后,才执行后面的function2)
异步请求就当发出请求的同时,浏览器可以继续做任何事,Ajax发送请求并不会影响页面的加载与用户的操作,相当于是在两条线上,各走各的,互不影响。异步请求可以完全不影响用户的体验效果,无论请求的时间长或者短,用户都在专心的操作页面的其他内容,并不会有等待的感觉
就是用 JS 发起一个请求,并得到服务器返回的内容。这跟以前的技术最大的不同点在于「页面没有刷新」,仅此而已
如何用JS发起一个请求
创建一个对象
var xhr = new XMLHttpRequest(); 为了支持ie6以及更早的版本,要 var xhr=new ActiveXObject()
1.建立TCP连接
2.web浏览器向服务器发送请求命令
3.web浏览器发送头信息
4.web服务器应答
5.web服务器发送应答头信息
6.web服务器向浏览器发送数据
7.web服务器关闭TCP连接
发送请求的方式,post,get,delete等
发送请求的地址,也就是url
请求头,包括客户端环境信息,身份验证信息
请求体,也就是请求正文,请求正文中可以包含客户提交的查询字符串信息,保单信息等等
监听请求成功后的状态变化
onreadystatechange:用来监听readyState的变化的
readyState:表示当前请求的后台的状态
status:表示处理的结果
readyState:表示当前请求的后台的状态
0:请求未初始化(还没有调用open())
1:请求已经建立,但是还没有发送(还没有调用send())
2:请求已经发送,正在处理中
3:请求正在处理中,通常响应中已经有部分数据可以用了
4:响应已经完成,可以获取并使用服务器的响应了
status:表示处理的结果(状态码)
1XX,表示收到请求正在处理中
status == 200 是表示处理的结果是OK的
状态码:200到300是指服务端正常返回
304:如果网页自请求者上次请求后再也没有更改过,应将服务器配置为返回此响应,进而节省带宽和开销
404:找不到对象(404 not found)
503:服务器超时
设置请求参数
xhr对象接受三个参数
1:表示请求类型
2:表示请求的网址
3:表示是否异步
get/post/put/delete
发起请求
get是获取数据,get的send方法的参数可以是null或者空,对发送信息有限制,一般在2000个字符,一般是用来查询(幂等)
post可以发送数据,但是在使用post方法发送数据,需要使用setRequestHeader()来添加HTTP头,同时,post的send()方法需要写入要发送的数据的值,
一般用于修改服务器上的资源,对信息数量无限制,也更安全
Ajax的不足
使用post提交需要设置content-type的问题
BY ︱林健凡|马扬睿