黑马程序员技术交流社区
标题: 【济南校区】PHP模块讲解之ajax(三) [打印本页]
作者: 小鲁哥哥 时间: 2018-1-22 11:07
标题: 【济南校区】PHP模块讲解之ajax(三)
本帖最后由 小鲁哥哥 于 2018-1-22 11:12 编辑
【济南校区】PHP模块讲解之ajax(三)
前面几节课我们讲了一下ajax的基本原理及数据的传输,接下来我们今天要讲的就是ajax在实际开发中会遇到的问题--缓存问题
首先来说一下缓存问题存在的原因:
IE浏览器请求到的资源会被自动缓存,如果下次请求时还是使用相同的url和参数,那么会默认从缓存文件中找到结果并使用。
一、解决缓存问题
思路:每次请求之前存在的url的文件时,会使用缓存。如果每次请求的url都是不同的,则每次都会发送新的请求。
1、 随机数
var url=’url?_=’+Math.random();
使用这种方式不是说不产生缓存文件,而是强制让每次请求的url是唯一的。并且会在客户端产生大量缓存文件。在理论上来说,还有可能两次随机的值是相同的。
[JavaScript] 纯文本查看 复制代码
<script>
//获取用户名
var username = $('#username').value;
//创建ajax对象
var xhr = createxhr();
//初始化
xhr.open('get','demo.php?username='+username+'&_='+Math.random());
//回调函数
xhr.onreadystatechange = function(){
//判断状态码
if(xhr.readyState == 4 && xhr.status ==200){
//如果存在
if(xhr.responseText ==1 ){
$('#msg').innerHTML = '<fontcolor="red">用户名已被占用</font>';
}else{//不存在的情况
$('#msg').innerHTML = '<fontcolor="green">用户名可以使用</font>';
}
}
}
//发送请求
xhr.send(null);
</script>
2、 时间戳
var url=’url?_=’+new Date().getTime();
以下这种写法同样也会产生大量缓存文件,但永不重复。
[JavaScript] 纯文本查看 复制代码
<script>
//获取用户名
var username = $('#username').value;
//创建ajax对象
var xhr = createxhr();
//初始化
xhr.open('get','demo.php?username='+username+'&_='+new Date().getTime());
//回调函数
xhr.onreadystatechange = function(){
//判断状态码
if(xhr.readyState == 4 && xhr.status == 200){
//如果存在
if(xhr.responseText ==1 ){
$('#msg').innerHTML = '<font color="red">用户名已被占用</font>';
}else{//不存在的情况
$('#msg').innerHTML = '<font color="green">用户名可以使用</font>';
}
}
}
//发送请求
xhr.send(null);
</script>
3、 设置请求头
xhr.setRequestHeader("If-Modified-Since","0");
通过设置请求头的信息,表示当前缓存文件的最后修改时间
[JavaScript] 纯文本查看 复制代码
<script>
//获取用户名
var username = $('#username').value;
//创建ajax对象
var xhr = createxhr();
//初始化
xhr.open('get','demo.php?username='+username);
//设置请求头
xhr.setRequestHeader('If-Modified-Since',"0");
//回调函数
xhr.onreadystatechange = function(){
//判断状态码
if(xhr.readyState == 4 && xhr.status == 200){
//如果存在
if(xhr.responseText ==1 ){
$('#msg').innerHTML = '<font color="red">用户名已被占用</font>';
}else{//不存在的情况
$('#msg').innerHTML = '<font color="green">用户名可以使用</font>';
}
}
}
//发送请求
xhr.send(null);
</script>
使用这种方式,每次都会产生一个缓存文件,但会覆盖前面的缓存文件,所以始终只有一个。
4、 设置响应头
header("Cache-Control: no-cache, must-revalidate");
[PHP] 纯文本查看 复制代码
<?php
//设置响应头
header("Cache-Control:no-cache,muset-revalidate");
$username = $_GET['username'];
mysql_connect('localhost','root','11111');
mysql_select_db('project');
mysql_query('set names utf8');
$result = mysql_query("select * from member where username = '$usernmae'");
到此为止,ajax的缓存问题就给大家介绍到这里,不知道大家对我今天讲解的ajax的缓存问题理解的如何,有什么问题可以在下面留言哦~
如果你想了解更多黑马课程请点击这里,如果你想加入黑马这个大家庭学习先进技术,广交天下好友! 黑马程序员济南中心联系电话:0531-55696830
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |