就像我面前有那么多迷失的灵魂一样,我在Ajax表单提交和IE浏览器缓存的蛇坑中挣扎.
我正在尝试使用jQuery表单插件Ajaxify wordpress注释编写一个简单的脚本.在Firefox,Chrome,Safari等中正常运行.等,但在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-comments-post.PHP,该文件优雅地将整个页面吐出来作为响应.因此,尽管它像蟾蜍一样丑陋,但我仍将响应文本粘贴在变量中,使用:last隔离最新注释,并将其向下滑动.
IE,但是,返回页面的缓存的版本,其中不包括新的注释.因此,“.commentlist li:last”选择了先前的注释,然后将其重复项毫无用处地滑到原始注释下方.
我已经尝试在ajaxSubmit选项中设置“ cache:false”,但是它没有任何效果.我尝试设置url选项并添加随机数或时间戳,但是最终它被附加到将评论提交到服务器的POST上,而不是返回返回响应的GET上,因此没有效果.我不确定还有什么尝试.如果我关闭浏览器缓存,则IE中的所有功能都可以正常运行,但是显然,我不能期望任何人浏览该页面.
任何帮助将不胜感激.提前致谢!
编辑进度报告:有人建议使用PHP标头来防止缓存,这确实有效.麻烦的是,当提交新评论时,wp-comments-post会分散整个页面,而我看到的添加标题的唯一方法是将它们放在wordpress帖子模板中,从而根本无法缓存所有帖子时代-完全不是我要寻找的行为.
有没有一种方法可以设置一个有条件的PHP(“ if is_ajax”或类似的东西),以防止在常规页面加载期间应用标头,但是如果该页面是由Ajax GET调用的,则可以将其插入?
最佳答案
jQuery.ajaxSubmit()接受标准jQuery.ajax()的任何选项.因此,您可以使用标准的cache:false选项关闭缓存:
jQuery(this).ajaxSubmit({
cache: false,success:
function(data) {
var response = $("<ol>"+data+"</ol>");
response.find('.commentlist li:last').hide().appendTo(jQuery('.commentlist')).slideDown('slow');
}
});