使用jQuery 1.7.1,我通过AJAX加载了一些HTML片段,这些片段是通过html()
方法注入到DOM中的。
HTML内容本身不能被缓存,但是它可能会加载一些可以缓存的JavaScript资源。
我发现的是,当我在$.ajax
调用中禁用缓存时,当HTML注入DOM时,这会将缓存清除参数添加到所有由jQuery发出的HTTP请求中。这样可以防止浏览器缓存原本静态的JavaScript资源。
我当前的解决方案不是很优雅,在这方面似乎很合情合理。在AJAX调用成功之后,但在处理HTML之前,我基本上翻转了全局缓存选项。
var $dynamic = $('#dynamic');
$.ajax({
url: href,
cache: false,
dataType: 'html',
success: function(data, textStatus, jqXHR) {
// This is hokey, but needed to allow browser to cache
// resources loaded by the fragment
$.ajaxSetup({cache:true});
$dynamic.empty().html(data);
$.ajaxSetup({});
}
});
谁能想到一种更好的方法呢?我是否应该避免<script rel=...>
在加载了AJAX的片段中使用标记,而是使用其他方法加载了JavaScript?
旁注,似乎有一些相关的SO问题,但是其中一个问题的答案不是公认的答案,而另一个问题则表明行为在jQuery 1.4中已更改,因此这可能是某种回归。
编辑
详细地说,上面的jQuery代码段被应用于一个div
元素。整理成这样:
<html>
<head>
// ... load jquery ...
<script type="text/javascript">
$(document).ready(function() {
var $dynamic = $('#dynamic');
$('a').click(function(e) {
e.preventDefault();
var $a = $(this);
var href = $a.attr('href');
$.ajax({
url: href,
cache: false,
dataType: 'html',
success: function(data, textStatus, jqXHR) {
$.ajaxSetup({cache:true});
$dynamic.empty().html(data);
$.ajaxSetup({});
}
});
});
});
</script>
</head>
<body>
<a href="/api/dynamic-content/">Click Here</a>
<div id="dynamic"></div>
</body>
</html>
事件发生时(在这种情况下为单击),处理程序将调用$.ajax
以将text /
html片段加载到#dynamic
div元素中。这是一个这样的片段可能看起来像的示例:
<p>Some dynamic content here...</p>
<script type="text/javascript" src="/static/some.js"></script>
因此,success
AJAX调用的处理程序加载了text / html代码段,并通过jQuery
html(...)
函数将其注入到DOM中。如您所见,text / html片段也可能具有指向外部脚本的链接。
有关的文档html(...)
表明,这种使用模式还不错,并且脚本资源将按照预期的方式加载和执行。
我遇到的问题是text / html片段的内容不可缓存,必须使用缓存清除机制调用。但是,它需要加载的JavaScript资源 是
静态且可缓存的,但是jQuery在加载JS资源时会应用缓存清除,因为最初的AJAX调用是使用cache : false
细分而言,这是事件链:
HTTP GET /api/dynamic-content/?_=1331829184164
$dynamic.empty().html(data);
$dynamic.empty().html(...)
施行 HTTP GET /static/some.js?_=1331829184859
我正在寻找一种更优雅的方法来禁用对text / html片段注入DOM后触发的后续或“内部” HTTP请求的缓存清除功能,该请求被触发以加载JS资源。
简而言之,其他所有事情都是正确的,我只是想让它做HTTP GET /static/some.js
,而不是HTTP GET /static/some.js?_=1331829184859
最后一步。
如果将服务器设置为正确标识可以和不可以缓存哪些资源,则该cache: false
选项将不是必需的。
另一种选择是在方法上使用a POST
而不是GET
using type: 'POST'
选项ajax
。
我发现了与jQuery相关的类似问题。我的目标是找出如何防止jQueryMobile和PhoneGap中的缓存(我使用JSONP)。我正在进行一些ajax调用,动态地填充listview。我想在每次初始化页面(pageinit)时查询web服务。在我的android设备上,在新的查询之后,每次我进入页面时,数据都会添加到listview中。它不会删除,每次我访问页面时,我都会添加一个副本。我认为这
问题内容: 我正在使用jQuery的网页上工作。我有一个Ajax调用,它从服务器获取数据并更新div。在该数据内部有一个jQuery函数,但是在将数据加载到页面中之后未调用该函数。我已经在页面中包含了正确的js文件。 这是从Ajax调用返回并放入div的内容: 将html插入页面后,如何使返回的javascript运行? (我将Rails与jRails插件结合使用) 问题答案: 如果要对具有htm
问题内容: 好像我使用加载动态内容,结果缓存在浏览器中。 在QueryString中添加一些随机字符串似乎可以解决此问题(我使用),但这听起来像是一种hack。 还有其他方法可以做到这一点吗?或者,如果唯一字符串是实现此目标的唯一方法,则除之外还有其他建议吗? 问题答案: 我使用,这将避免冲突,除非您在同一毫秒内发生多个请求: 编辑: 这个答案已经好几年了。它仍然有效(因此我没有删除它),但是 现
问题内容: 我已经审查了很多有关此类问题的答案,但现在我对最佳方法感到困惑。鉴于最新的jquery,我想 调用一个ajax函数 做ajax处理(成功或错误)//正常工作 成功或错误时,将状态返回到调用函数以进行进一步处理 在调用函数(doAjax)中,如何等待回调,然后完成对成功或错误的处理(在这种情况下,成功时清除表格,错误时保持原样) 感谢任何建议, Art [EDIT] 你们发现有一个错字,
我有从我的网页生成的AJAX POST请求,可能有多个POST请求具有相同的POST数据。但是响应可能会有所不同,我希望确保我没有得到这些请求的缓存响应。我需要每个请求点击网页。 我假设对POST请求的响应不会被缓存,这对吗?
问题内容: 在iPad项目中,我正在研究该应用程序的内部,该应用程序显示一个.html文件,该文件链接到.css文件,即 这些文件存储在iPad本地,但从远程服务器获取。我注意到,它会无限期地缓存.css文件,并且无论何时更改都会拒绝加载新文件。我曾经更改过文件的名称只是为了使其重设,但是从长远来看,这是不可接受的。 有没有一种方法可以防止将CSS文件缓存在中?甚至更好的是,有什么方法可以说何时缓