1、Ajax如何发送数据的:
// 1.get: 将数据拼接在url后即可
// 2.post: 将数据放在send的参数内,但是提前要设置发送数据的格式,如下:
// ajax对象.setRequestHeader("Content-type","application/x-www-form-urlencoded");
2、AJAX状态码:
- 0:创建ajax对象成功
- 1:配置请求信息成功
- 2:响应已经回到浏览器
- 3:浏览器正在解构响应体
- 4:响应体解析完毕可以使用了
3、
ajax:可以请求正常的资源,不可以请求跨域且对方没有明确允许的资源;
jsonp:只能请求支持jsonp的跨域的资源。
4、ajax中的一些小问题:
(1)兼容
xhr对象的兼容:(几乎可以不考虑了)
IE5以上:
new XMLHttpRequest();
IE5及以下:
new ActiveXObject("Microsoft.XMLHTTP");
事件的兼容:(几乎不考虑了)
几乎大部分浏览器都支持两种:
xhr.onreadystatechange = function(){
手动判断ajax的状态和http的状态;
}
xhr.onload = function(){
只需要判断http的状态
}
(2)异步同步
ajax自身默认异步执行,可以强行修改成同步执行:
在open方法中传入第三个参数,布尔值
true为异步,默认值;
false为同步,官方不推荐使用,不要使用。
(3)缓存:
当get请求时,浏览器会默认缓存要请求的资源,以提升用户体验:
①浏览器第一次打开某个网页时,会自动下载当前网页上的一些资源;
②浏览器第二次打开同一个地址时,会自动先从自身缓存中查找资源,如果有,直接加载,如果没有,再从服务器重新请求。
如果缓存中有了,就不在去服务器中请求了,如果此时服务器中的数据正好改了,有可能会拿不到新数据。
// 例:以下地址,对于浏览器来说,是不一样的但是对于服务器来说,请求的资源是同一个:
data/hello.txt?abc=123233123123241
data/hello.txt?abc=713575765623531
data/hello.txt?abc=713575761231231
data/hello.txt?abc=713575761876887
data/hello.txt?abc=713575767657576
// 最终解决方案:在get请求的url后拼接时间戳,如下:
let url = "data/hello.txt?__qft=" + new Date().getTime();