关于AJAX请求服务器后缓存数据,造成没有及时刷新的问题
2010-04-29 16:35
676 查看
最近在做项目的时候,使用了ajax去请求服务器的数据!刚开始还可以,我测试一切运行正常(我不是专业的测试人员哈!所以还是有些问题没有测出来哈)!后来ajax请求的数据变化了,但是页面数据没有变,依然是第一次的数据!这个问题害我整了好大半天啊![还是自己技术不到位啊!] 没办法遇到问题还是要解决啊!只有硬着头皮弄了撒! 因为ajax请求也是到后台页面执行的,那就断点吧! 嘿嘿,通过断点我发现了问题! 每次ajax请求他只有第一次去后台,后面的他就不会去后台了!如果你其他按钮把数据改变了,因为ajax第二次以后都不会去后台执行去数据了!所以数据没有及时刷新[数据被缓存了,如果你重启IE你修改的数据就可以看到了],有点希望了! 至少症状找到了撒!接下就是怎么解决这个问题啊! 嘿,后来和Bobby同事提醒我在ajax的请求url后面加一个时间戳参数试一试! 那就死马当活马医了!反正我也没有好的方法! 哈哈居然可以了! [在此感谢bobby](还是自己技术不到位啊!汗…) 后来去google了一下,多少人也遇到这个问题! 下面集自己的理解和网络上的一些资源解决这个问题! [IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据]
我最初的做法: 下面的代码运行后! 第一次点击GetData按钮显示 demo , 当在点击changDate改变数据后, 在点击 GetData还是显示 demo !而不是我们期望的changed data 字符串! 这就是我最初遇到的问题! 当然下面只是一个简单的demo而没有太多的实际意义!
上面的2种方法,我已测试通过!并解决了我的问题!
Technorati 标签: ajax
我最初的做法: 下面的代码运行后! 第一次点击GetData按钮显示 demo , 当在点击changDate改变数据后, 在点击 GetData还是显示 demo !而不是我们期望的changed data 字符串! 这就是我最初遇到的问题! 当然下面只是一个简单的demo而没有太多的实际意义!
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ajax_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script runat="server"> private static string data = "demo"; protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; if (!string.IsNullOrEmpty(Request.QueryString["ajax"])) { Response.Write(data); Response.End(); } } protected void Unnamed1_Click(object sender, EventArgs e) { data = "Changed data"; } </script> <script type="text/javascript"> function createXmlHttpRequest() { if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { return new XMLHttpRequest(); } } function test() { //ajax请求地址,就是本页面哈 var url = "Default.aspx?ajax=true"; /* 解决方法: var url = "Default.aspx?ajax=true&random=" + Math.random(); var url = "Default.aspx?ajax=true&random=" + new Date().getMilliseconds(); 后面跟一个随机数或者时间戳保证他请求的url每次都不一样!这样就不会被缓存 2.在send()方法之前设置setRequestHeader XMLHttpRequest.setRequestHeader("If-Modified-Since","0") */ var xmlHttpRequest = createXmlHttpRequest(); xmlHttpRequest.onreadystatechange = function() { if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) { var context = xmlHttpRequest.responseText; document.getElementById("divInfo").innerHTML = context; } } xmlHttpRequest.open("GET", url, true); //xmlHttpRequest.setRequestHeader("If-Modified-Since","0"); xmlHttpRequest.send(null); } </script> </head> <body> <form id="form1" runat="server"> <input id="getData" type="button" value="GetData" onclick="test();" /> <div id="divInfo"> </div> <asp:Button runat="server" Text="changDate" onclick="Unnamed1_Click" /> </form> </body> </html>
上面的2种方法,我已测试通过!并解决了我的问题!
Technorati 标签: ajax
相关文章推荐
- 在ie中关于ajax请求获得数据缓存问题的解决办法
- 关于HTML发送AJAX请求一直重复刷新页面问题
- Ajax请求服务器数据动态刷新HighCharts表格
- 关于ajax请求在IE6,9下的缓存问题
- 使用SpringMvc跨服务器上传图片,Ajax异步刷新图片框显示图片功能请求不到后台,onChange事件没有激活的源码?
- ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
- jquery 请求ie缓存,数据不更新的问题【ajax禁用缓存解决ie数据不更新的问题】
- ajax在IE浏览器中请求的数据不正确,缓存问题
- 关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题
- ajax异步请求不能刷新数据的问题
- 关于IE的Ajax请求结果缓存的问题
- 关于andorid 中ListView 没有及时刷新的问题
- 关于客户端与服务器ajax使用json数据交互,出现中文乱码或因包含html标答而报错的问题(base64加密)
- 关于ajax请求数据不能刷新的解决方法
- 关于试用jquery的jsonp实现ajax跨域请求数据的问题
- JQUERY的AJAX请求缓存里的数据问题处理
- 关于AJAX请求JSON数据(解决responseText空的问题)
- 关于前端ajax请求会缓存的问题
- jQuery发送ajax请求,IE有缓存,数据不更新问题
- 关于ionic app $http.get()无法请求,导致页面没有数据的问题