我想知道是否可以从特定的 AJAX方法清除缓存.

说我有这个:

$.ajax({
  url: "test.html",cache: true,success: function(html){
    $("#results").append(html);
  }
});

现在有99%的时间可以使用缓存结果,因为它应该始终具有相同的内容.但是,如果用户更新此内容,它(当然)会更改.如果它被缓存,它仍然会显示旧内容.

因此,如果我可以为此方法选择此缓存并清除它并且所有其他缓存的东西都会保留,那将会很酷.

可以这样做吗?

编辑

我不跟随.我看到,如果将cache设置为false,它会创建一个唯一的URL来阻止浏览器缓存它.

我的问题是我希望它被缓存,直到有人对它进行更新.然后它不应该被缓存,直到他们再次点击它.然后它应该再次缓存.

基本上,我有一个更新模型对话框(jquery UI),它会显示一个更新表单,以便用户可以更新表行.当他们单击“更新”时,它会更新该表行.现在,一个列可以有几个段落的数据,这会使表看起来很糟糕.

因此,为了保留表格,我在其中放置了一个名为“显示数据”的链接.现在,单击此按钮时,将显示一个对话框模型框,并从服务器中提取数据.

如果他们点击它5次就会重新加载5次.这就是我想要缓存它的原因.但是,如果他们点击它并且它被缓存,那么无论出于何种原因他们去更新该行并单击“显示数据”,他们将获得缓存版本,而不是更新版本.

我可能会隐藏所有段落并使用jquery显示它们,但我宁愿按需提供它们.否则会有很多隐藏的垃圾,它会减慢页面的速度(想象一下,如果某个人有50行,并且每列中的每一行都有1000个字符).

解决方法

您误解了默认缓存:$.ajax的true参数.在文档中,您将找到以下内容:

If set to false it will force the
pages that you request to not be
cached by the browser.

要了解此参数的真正功能,您应该查看jQuery源代码:

if ( s.cache === false && type === "GET" ) {
    var ts = Now();

    // try replacing _= if it is there
    var ret = s.url.replace(rts,"$1_=" + ts + "$2");

    // if nothing was replaced,add timestamp to the end
    s.url = ret + ((ret === s.url) ?
            (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
}

因此,如果您使用cache:false,jQuery只会使用当前时间向URL添加其他参数.然后,浏览器会看到一个不同的URL,并确定其缓存中没有包含该URL的数据,因此它会将请求转发给服务器.而已.

更新基于问题的编辑部分:如果我理解正确,您想使用本地浏览器缓存,但您想要控制它.如果是这样,您应该使用默认值cache:true(不要在$.ajax中添加此参数).您应该在服务器响应中添加一些额外的缓存信息,而不是依赖于$.ajax()选项.浏览器将始终明确遵循缓存说明,因为它们写在相应的页眉中.

因此,例如,您可以在响应标头中添加时间,指定页面有效的时间.如果您不需要客户端上的绝对最新版本的数据,则非常有效(请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html).

我在大多数应用程序中使用的另一种方法是将以下内容添加到服务器响应标头中

>“Cache-Control”设置为“max-age = 0”,关闭本地缓存
>“Etag”具有一些值(例如,发送数据的MD5哈希值)以标识数据包含的内容.该值是完全免费的,您可以按照自己喜欢的方式计算它,但是两个不同的响应应该具有不同的“Etag”值.

如果您希望始终拥有最新版本的数据,但又不希望服务器再次发送数据,则此方法非常适用于动态内容(例如,基于来自数据库的数据的响应)自上次回复以来没有改变.如果您按照这种方法,浏览器(每个浏览器)添加到发送到服务器的数据的标题,在第二次单击“显示数据”按钮时,“Etag”值来自“If-None-”中的本地兑现页面匹配“HTTP请求标头.然后,服务器可以定义数据是否已更改.如果没有,服务器可以响应空响应和“304 Not Modified”而不是“200 OK”.浏览器知道这一点,它直接从当地现金获取数据.因此,您的$.ajax请求将成功结束,您将获得当地现金的数据.

你可以将两种方式结合起来.只需设置一个非零值,而不是“max-age = 0”,这是当地现金有效期的秒数(见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3)

你能清除jquery ajax缓存吗?的更多相关文章

  1. 详解使用双缓存解决Canvas clearRect引起的闪屏问题

    这篇文章主要介绍了详解使用双缓存解决Canvas clearRect引起的闪屏问题的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  3. 利用Node实现HTML5离线存储的方法

    这篇文章主要介绍了利用Node实现HTML5离线存储的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  9. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部