无法禁用jQuery缓存
更新
我发现它一定是缓存问题,但我无法关闭缓存。 这是我改变的脚本:
jQuery.ajaxSetup({ // Disable caching of AJAX responses cache: false }); jQuery("#button1").click(function (e) { window.setInterval(refreshResult, 3000); }); function refreshResult() { jQuery("#divResult").load("/Home/Refresh"); }
它每3秒更新一次网页的一部分。 清除Web浏览器缓存后,它只工作一次,之后无效 – 请求/ Home / Refresh没有3秒的间隔,数据从服务器发送,但网页上没有显示任何内容; 后续请求发送cookie ASP.NET_SessionId = wrkx1avgvzwozcn1frsrb2yh。 我正在使用ASP.NET MVC 2和c#。
我有jQuery的问题,这是我的网络应用程序的工作方式
- 在用户单击button1按钮后,包含表单和jQuery脚本的Search.aspx网页将数据发布到Home控制器中的Search()操作。
Search.aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> Title Search
jQuery("#button1").click(function (e) { window.setInterval(refreshResult, 5000); }); function refreshResult() { jQuery("#divResult").load("/Home/Refresh"); }
[HttpPost] 公共ActionResult搜索(WebGLSQuery queryToCreate) { if(!ModelState.IsValid) return View(“搜索”); queryToCreate.Remote_Address = HttpContext.Request.ServerVariables [“REMOTE_ADDR”]; Session [“Result”] = null; SearchKeywordLines(queryToCreate); Thread.sleep代码(15000); return View(“搜索”); }//搜索()
-
单击button1按钮后,将运行Search.aspx网页上的脚本。
-
控制器中的Search()动作运行的时间较长。 我通过放置Thread.Sleep(15000)在测试中模拟这个; 在Search()动作中。
-
5秒 按下Submit按钮后,上面的jQuery脚本调用Home控制器中的Refresh()动作。
public ActionResult Refresh() { ViewData [“Result”] = DateTime.Now; 返回PartialView(); }
- Refresh()呈现此部分
问题是在Internet Explorer 8中只有一个请求/ Home / Refresh; 在Firefox 3.6.3中,所有对/ Home / Refresh的请求都已生成,但网页上没有显示任何内容。 Firefox的另一个问题是/ Home / Refresh的请求每隔一秒发送一次,而不是每5秒一次。
我注意到,在我清除Firefox缓存后,第一次按下button1时脚本运行良好,但之后它不起作用。
我很感激有用的建议。
现在这是一个老问题。 但是我遇到了一个我认为与缓存相关的问题,但事实certificate这是另一个问题,我认为某些人可能会觉得它很有用。
我有一套例程就是这样的
-
MAIN PAGE通过.load调用SUB PAGE。 SUB PAGE具有用于数据输入的表和用于启动SQL PAGE以执行相关sql的超链接
-
在数据输入SUB PAGE(通过MAIN PAGE)后,使用SQL PAGE单击超链接更新数据库,然后刷新包含SUB PAGE的MAIN PAGE div
嗯……几个小时我一直在输入数据,然后点击相关链接才发现MAIN PAGE div有时会刷新,有时却没有。 F5总是工作。 所以我很确定我有缓存问题。 所以我停止使用.load并开始使用.ajax,使用’cache:false’。 我可以看到.ajax现在适当地随机化了获取url,但仍然我的MAIN PAGE div并不令人耳目一新。 我确定我有一个缓存问题……
但是我没有。
使用谷歌Chrome的开发工具 – 我可以看到,有时我的jQuery例程正在完成它应该做的事情,即
a)单击SUB PAGE; 执行SQL PAGE; 刷新MAIN PAGE div
有时事情按此顺序发生……
b)单击SUB PAGE; 刷新MAIN PAGE div; 执行SQL PAGE
我的代码编写为a),但由于SQL PAGE需要一段时间才能执行,b)实际上是发生了什么。 并且b)很糟糕 – 我的MAIN PAGE div实际上是刷新的,但更新我的数据表的SQL在刷新之前没有执行。
一旦我意识到这一点,修复很容易。 使用.ajax,我实现了以下逻辑:
i)单击SUB PAGE ii)执行SQL PAGE iii)条件成功执行SQL PAGE(使用.ajax中的’success:’选项),然后刷新包含SUB PAGE的MAIN PAGE div iv)我离开了’cache:错误’到位,以防万一
此修复程序100%的时间用于我的代码
因此,如果您想要解决为什么缓存不会关闭,请确保您确实存在缓存问题,而不是我上面描述的问题。
祝好运
您可以通过添加时间戳作为GET
参数的一部分来更改您请求的URL:
function refreshResult() { jQuery("#divResult").load("/Home/Refresh?"+(+new Date())); }
这应该忽略浏览器缓存(因为url每次都在变化)。 当然 – 这是在ajax请求上将jQuery cache
参数设置为false的原因,我不是100%确定.load()
将使用该设置。
任何浏览器ajax处理。 从未缓存过。
// Global Vars var ajaxRefreshCount = 0; var ajaxRequestsCount = 0; // Call this function for the ajax request function ajaxRequest(name) { ajaxRefreshCount++; ajaxRequestsCount++; var reqAjax = jQuery.get("/?ajax=" + name + "&r="+ajaxRefreshCount+"&s="+new Date().getTime(), function (data) { ajaxCallback(data, name)} ); } function ajaxCallback(data, ajaxRequestName) { ajaxRequestsCount--; // Your Stuff if (ajaxRequestName == "home_refresh") jQuery("#divResult").html(data); if (ajaxRequestsCount == 0) ajaxFullyLoaded(); } function ajaxFullyLoaded() { // Execute when all ajax requests where processed } // Example for home refresh ajaxRequest("home_refresh");
IE8问题可能是IE缓存了类似的请求,但是如果他们处理这个问题我不熟悉JQueries内部,解决方案可能是添加一个随机的get var。
我找到了解决方案,我换了
<% using (Html.BeginForm()) {%>
同
<% using (Ajax.BeginForm(null)) {%>
- 从ASP.NET MVC2应用程序执行Ajax调用时出现问题
- 如何将新的validation规则添加到mvcClientValidationMetadata?
- setInterval在Ajax请求后停止
- 传递给MVC Action的JSON Date参数始终为null
- ASP.NET MVC 2使用jQuery加载局部视图 – 没有客户端validation
- 使用jQuery调用MVC中的action方法,参数不起作用
- ASP.NET MVC – 如何异步加载图像?
- 如何使用jquery从列表框中禁用多项选择? 还是javascript?
- 无法获取jquery $ ajax来调用.NET MVC 2控制器方法