架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7989|回复: 2

[Jquery] [转]jQuery.getJSON的缓存问题的解决办法

[复制链接]
发表于 2015-9-5 10:21:58 | 显示全部楼层 |阅读模式
jquery的getJson方法在第一次请求服务器获得返回数据之后,后面的相同的请求直接从缓存中读取,不再请求数据库了。

解决方法如下:

1 让每次调用的url都不一样
方法:在参数中加一个随机数。
例1:
jQuery.getJSON("$!{Root}/a/a/s.ashx",{"ID":id,"Name":name,"Path":path,random:Math.random()},function(responseText){}
例2:
"xxx.aspx?randID="+Math.random
例3:
"xxx.aspx?randID="+ escape(new Date())
2 将cache设为False
$.ajax不缓存版:
$.ajax({
type:"GET"
url:'test.html',
cache:false,
dataType:"html",
success:function(msg){
alert(msg);
}
});
3.在labels.html文件的顶部加入以下声明:

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

<META HTTP-EQUIV="Expires" CONTENT="-1">
4.load函数不仅可以调用HTML,也可以调用script,比如labels.php,可以在php文件里使用header函数:

<?php

header("Cache-Control: no-cache, must-revalidate");

?>
5 使用post代替get方法。
使用Post方式需注意:
设置header的Context-Type为application/x-www-form-urlencode确保服务器知道实体中有参数变量. 通常使用XmlHttpRequest对象的SetRequestHeader("Context-Type","application/x-www- form-urlencoded;")。例:

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
参数是名/值一一对应的键值对,每对值用&号隔开.如 var name=abc&sex=man&age=18,注意var name=update.php?

abc&sex=man&age=18以及var name=?abc&sex=man&age=18的写法都是错误的;
参数在Send(参数)方法中发送,例: xmlHttp.send(name); 如果是get方式,直接 xmlHttp.send(null);

服务器端请求参数区分Get与Post。如果是get方式则$username = $_GET["username"]; 如果是post方式,则$username = $_POST["username"];
6 在服务端加 header("Cache-Control: no-cache, must-reva lidate");
7 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
8 在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");




上一篇:c#将\u64CD\u4F5C\u6210\u529F 转成中文“操作成功”
下一篇:基于HTML5表单验证jQuery html5Validate插件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-9-5 10:23:09 | 显示全部楼层
url?username=test&aaa= Math.random()
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2015-9-5 10:24:24 | 显示全部楼层
$.getJson方法当重复请求同一页面时,只从缓存中加载数据,要想每次重新加载需要将URL后面跟动态参数
$.getJson('a.ashx?t='+new Date() ,'{a:b}',fun....)
在参数列表中改变参数无效。
function changeValidateCode(obj) {
//获取当前的时间作为参数,无具体意义
var timenow = new Date().getTime();
//每次请求需要一个不同的参数,否则可能会返回同样的验证码
//这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。
obj.src='rand.action?d='+timenow;
}
<img id='rand' src='rand.action?t=<%=new Date().getTime() %>' onclick='changeValidateCode(this)' title='看不清?换一张!' width='50' height='22'/>
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-29 07:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表