无法禁用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

model.Url) %>
model.Url, new { size = "50" } ) %> model.Url) %>
model.Location) %>
model.Location, new { size = "50" } ) %> model.Location) %>
model.KeywordLines) %>
model.KeywordLines, 10, 60, null)%> model.KeywordLines)%>

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这是另一个问题,我认为某些人可能会觉得它很有用。

我有一套例程就是这样的

  1. MAIN PAGE通过.load调用SUB PAGE。 SUB PAGE具有用于数据输入的表和用于启动SQL PAGE以执行相关sql的超链接

  2. 在数据输入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)) {%>