【发布时间】:2011-01-19 19:03:24
【问题描述】:
像我之前许多迷失的灵魂一样,我在 Ajax 表单提交和 IE 浏览器缓存的蛇坑中挣扎。
我正在尝试使用 jQuery 表单插件编写一个简单的脚本来 Ajaxify Wordpress cmets。它在 Firefox、Chrome、Safari 等中运行良好。 al.,但在 IE 中,响应文本被缓存,结果是 Ajax 拉入了错误的注释。
jQuery(this).ajaxSubmit({
success:
function(data) {
var response = $("<ol>"+data+"</ol>");
response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow');
}
});
ajaxSubmit 将评论发送到 wp-cmets-post.php,它不雅地吐出整个页面作为响应。因此,尽管它像蟾蜍一样丑陋,但我还是将响应文本粘贴在一个变量中,使用 :last 来隔离最近的评论,并将其向下滑动。
但是,IE 正在返回页面的缓存版本,其中不包含新评论。所以“.commentlist li:last”选择了previous评论,它的副本然后毫无用处地滑到原来的下面。
我尝试在 ajaxSubmit 选项中设置“cache: false”,但没有效果。我已经尝试设置一个 url 选项并添加一个随机数或时间戳,但它最终被附加到将评论提交给服务器的 POST,而不是返回响应的 GET,因此没有任何效果。我不确定还能尝试什么。如果我关闭浏览器缓存,在 IE 中一切正常,但这显然不是我可以期望任何查看页面的人做的事情。
我们将不胜感激任何帮助。提前致谢!
使用进度报告编辑:一些人建议使用 PHP 标头来防止缓存,这确实有效。问题是 wp-cmets-post 在提交新评论时会吐出整个页面,而我可以看到添加标题的唯一方法是将它们放在 Wordpress 帖子模板中,这会完全禁用所有帖子的缓存次——不完全是我正在寻找的行为。
有没有办法设置 php 条件——“if is_ajax”或类似的东西——这样可以防止在常规页面加载期间应用标题,但如果页面由 Ajax GET 调用,则将它们插入?
【问题讨论】: