什么是Ajax?
AJAX的全称是(异步的 JavaScript 和 XML)。因为普通页面刷新一次必须向服务器请求全部的页面;如果使用异步请求,每次就可以只向服务器请求我们需要用到的数据,这样可以减轻服务器的负担,并且可以让web页面有应用程序的效果和相应特征,给用户更好的体验,比如表单的实时验证、无刷新分页和google地图 等
什么情况下会产生缓存?
Ajax在发送的数据成功后,为了提高页面的响应速度和用户体验,会把请求的URL和返回的响应结果保存在缓存内,当下一次调用Ajax发送相同的请求(URL和参数完全相同)时,它就会直接从缓存中拿数据
如何解决缓存问题?
1、在ajax发送请求前加
xhr.setRequestHeader("If-Modified-Since","0");
2、在服务器端加
header("Cache-Control:no-cache");
header("Pragma:no-cache");
header("Expires:-1");
3、在 Ajax 的 URL 参数后加
"?fresh=" + Math.random();
4、第种方法和第3种类似,在 URL 参数后加
"?timestamp=" + new Date().getTime();
5、用POST替代GET:
不推荐
Ajax的跨域请求如何处理?
谈到跨域请求,就不得不说一下同源政策。那么,什么是同源呢?
同源政策是浏览器的一种安全策略,所谓同源是指域名,协议,端口完全相同,只有同源的地址才可以相互通过AJAX 的方式请求。
如果请求的地址非同源,就有三种行为受到限制
- Cookie无法读取。
- DOM 无法获得。
- AJAX 请求无效(可以发送,但浏览器会拒绝接受响应)。
同源或者不同源说的是两个地址之间的关系,不同源地址之间请求我们就称之为跨域请求
那么,如何处理跨域请求呢?
1、使用代理的方式
先发送Ajax请求到本网站中的一个php文件,然后让这个php文件去访问其他域的内容(那么这个php文件就可以认为是一个代理文件)
echo file_get_contents('http://www.js.com/04kuayu.php');
2、使用CORS方式(跨域资源共享)
需要在请求的网站中设置:Access-Control-Allow-Origin
header('Access-Control-Allow-Origin:允许的网站完整域名');
header('Access-Control-Allow-Origin:*'); //允许所有网站来请求
IE9+才能使用此方式
3、使用jsonp完成跨域请求
jsonp就是通过html中script标签的src属性访问另外域的内容,即跨域读取数据
(使用script标签的src属性引入的文件会自动执行,只能发送 GET 请求,跟AJAX 提供的 XMLHttpRequest 没有任何关系)
如何理解请求的同步和异步?
异步请求,在同一个时间点可以执行多个进程;
同步请求,在同一个时间点,只能进行一个操作,其他操作只能等待。