$.getJSON 获取aspx(有缓存)首次成功,第二次失败 本帖最后由 cceon 于 2013-07-06 02:14:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在提交的程序里 清楚缓存、 //清除该页输出缓存,设置该页无缓存 context.Response.Buffer = true; context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); context.Response.Expires = 0; context.Response.CacheControl = "no-cache"; context.Response.AppendHeader("Pragma", "No-Cache"); 试试 看 试了下,用了楼上的代码,页面的OutputCache就没有了 直接访问news.aspx有输出没?没有就是news.aspx有问题。 news.aspx 独立访问的话 始终都有输出的news.aspx 不设置 OutputCache 的话,$.getJSON 一直都ok,没有问题news.aspx 设置了 OutputCache 的话,$.getJSON 第一次ok,以后就获取不到了(除非OutputCache过时长了) 用firebug监视下发出了请求了吗 <%@ OutputCache Duration="600" VaryByParam="date;r"%> 页面级缓存中,你VaryByParam属性中仅单独针对date参数做出了缓存定义。所以news.aspx?date=1&r=0.1353news.aspx?date=2&r=0.6989这两个返回的结果会是相同的,VaryByParam属性可同时配置多个参数以做区分,多个参数用分号分隔开如果上述方法可以解决你的问题,那就再多说一句。既然使用了r: Math.random()做动态的随机参数,你的页面级缓存的设置就已经毫无意义 楼上说的完全对,我也刚刚找到这个问题jsonp=? 和 r 每次都产生不同的值,news.aspx页面虽然独立访问的时候都没有错,但是jsonp的值变化这就是为什么独立访问news.aspx都是OK的原因home.html 第一次调用是:news.aspx?jsonp=jQuery180043238143413327634_1373202466179&date=2013-7-1&r=0.123这时候,news.aspx返回是jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])再次调用是:news.aspx?jsonp=jQuery18003844868973828852_1373202580388&date=2013-7-1&r=0.456这时候,news.aspx返回依然是jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])所以,就像楼上所说的,页面级缓存毫无意义,解决办法是在news.aspx页面里面,把需要缓存的内容,根据日期缓存起来,其他动态内容依旧,这样就ok了以下代码是ashx文件的部分代码StringBuilder sb = new StringBuilder();string CacheName = context.Request.QueryString["date"].ToString();//缓存名称if (context.Cache[CacheName] == null){ List<Article> l = Article.GetNews(DateTime.Parse(date.ToString()));//这段就是访问数据库 foreach (Article a in l) { sb.Append("{\"id\":\"" + a.ID + "\","); sb.Append("\"title\":\"" + a.Title + "\"},"); } if (sb.ToString().EndsWith(",")) { sb.Remove(sb.Length - 1, 1); } context.Cache.Insert(CacheName, sb, null, DateTime.Now.AddMinutes(10), System.Web.Caching.Cache.NoSlidingExpiration);//10分钟缓存}else{ sb = (StringBuilder)context.Cache[CacheName];} 所以就导致jquery再次调用时要执行jQuery18003844868973828852_1373202580388([{id:1,title:'标题1'}]),但是news.aspx返回了:jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])注意:以上jQuery后面的一串数字是不一样的 js接受串口无法接受串口数据,什么原因? 如何做一个firefox插件, 实现网址过滤???? 文本框的的值清空的簡單問題 frame区域更新问题? 去除img标签以外的所有字符 网页中的window.onscroll事件原来有效,但是把这个网页放到iframe中就没用了 请问如何用直接用js代码给body加上事件处理? 关于jquery 的on 方法 jquerymobile 1.4的dialog怎么做成confirm的效果 如何关闭指定窗口 请问如何把xml里的指定文件内容提取到表单的文本框里 jquery获取input表单中的密码值
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
context.Response.Expires = 0;
context.Response.CacheControl = "no-cache";
context.Response.AppendHeader("Pragma", "No-Cache"); 试试 看
页面级缓存中,你VaryByParam属性中仅单独针对date参数做出了缓存定义。所以
news.aspx?date=1&r=0.1353
news.aspx?date=2&r=0.6989
这两个返回的结果会是相同的,VaryByParam属性可同时配置多个参数以做区分,多个参数用分号分隔开如果上述方法可以解决你的问题,那就再多说一句。既然使用了r: Math.random()做动态的随机参数,你的页面级缓存的设置就已经毫无意义
jsonp=? 和 r 每次都产生不同的值,news.aspx页面虽然独立访问的时候都没有错,但是jsonp的值变化这就是为什么独立访问news.aspx都是OK的原因
home.html 第一次调用是:news.aspx?jsonp=jQuery180043238143413327634_1373202466179&date=2013-7-1&r=0.123
这时候,news.aspx返回是jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])
再次调用是:news.aspx?jsonp=jQuery18003844868973828852_1373202580388&date=2013-7-1&r=0.456
这时候,news.aspx返回依然是jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])所以,就像楼上所说的,页面级缓存毫无意义,
解决办法是在news.aspx页面里面,把需要缓存的内容,根据日期缓存起来,其他动态内容依旧,这样就ok了
以下代码是ashx文件的部分代码
StringBuilder sb = new StringBuilder();
string CacheName = context.Request.QueryString["date"].ToString();//缓存名称
if (context.Cache[CacheName] == null)
{
List<Article> l = Article.GetNews(DateTime.Parse(date.ToString()));//这段就是访问数据库
foreach (Article a in l)
{
sb.Append("{\"id\":\"" + a.ID + "\",");
sb.Append("\"title\":\"" + a.Title + "\"},");
}
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
context.Cache.Insert(CacheName, sb, null, DateTime.Now.AddMinutes(10), System.Web.Caching.Cache.NoSlidingExpiration);//10分钟缓存
}
else
{
sb = (StringBuilder)context.Cache[CacheName];
}
但是news.aspx返回了:jQuery180043238143413327634_1373202466179([{id:1,title:'标题1'}])注意:以上jQuery后面的一串数字是不一样的