我有一个可以改变物体位置的cms。每次更改位置后,ajax调用都会更新整个对象列表。但不幸的是,一些数据存储在缓存中,并且没有可见的更改。有没有办法用javascript / request / other强制清除缓存?我在$.ajax
尝试了'cache:false',但它无效。
以下是示例页面:
http://ntt.vipserv.org/manage/playforward
我的js:
$(".object-position").livequery("change", function() {
$("#objects-list input").attr('disabled', true);
var action = $(this).attr('name');
var position = $(this).attr('value');
var id = $(this).attr("id");
var model = id.split("-")[0];
var object_id = id.split("-")[1];
$("#loader").show();
$("#loader").fadeIn(200);
$.ajax({
type: "POST",
async: true,
url: "/manage/update_position/",
data: "action=" + action + "&model=" + model + "&object_id=" + object_id + "&position=" + position,
dataType: "json",
success: function(data){
$("#loader").fadeOut("fast", function () {
$("#loader").hide();
});
$("objects-list").html(data["html"]);
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function () {
$("#message").hide();
});
}, 1500);
}
});
$("#objects-list input").attr("disabled", false);
return false;
});
答案 0 :(得分:14)
cache: false
的作用是将时间添加到请求数据中,因此每个请求都是唯一的,因此会绕过浏览器的缓存。我想知道你使用数据字符串而不是对象这一事实是否会导致问题。请尝试使用对象:
$.ajax({
type: "POST",
async: true,
url: "/manage/update_position/",
data: {
"action": action.
"model": model,
"object_id": object_id,
"position": position
},
cache: false,
dataType: "json",
success: function(data){
//[snip]
}
});
答案 1 :(得分:7)
只需替换
url: "/manage/update_position/",
与
url: "/manage/update_position/?nocache="+Math.random(),
强制重新加载页面而不使用浏览器的缓存。
答案 2 :(得分:2)
你有
$("objects-list").html(data["html"]);
请改为尝试:
$(".objects-list").html(data["html"]); // forgot leading dot?
此外,您似乎正在尝试使用包含.objects-list
元素本身的某些html替换<table>
表的内容。因此,在<table...><table...>
内容替换后,您将拥有.html()
等。