2010-10-30 146 views
5

我有一个cms,我可以在其中更改对象的位置。每次更改位置后,ajax调用会更新整个对象列表。但不幸的是,有些数据存储在缓存中,并且没有任何更改可见。有没有办法强制清除缓存与JavaScript /请求/其他?我试过$.ajax中的'cache:false',但它不起作用。强制ajax调用来清除缓存

下面是一个示例页面:

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; 
}); 

回答

2

你有

$("objects-list").html(data["html"]); 

试试这个:

$(".objects-list").html(data["html"]); // forgot leading dot? 

此外,它看起来像你试图用一些HTML,其中包括<table>元素本身来代替.objects-list表的内容。因此,在.html()内容替换之后,您会有<table...><table...>等。

13

做什么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

我确认 - 这实际上有效。缓存:假将时间戳添加到网址,并感谢这一点,每当新的内容被加载。 – alekwisnia 2012-09-19 08:22:03

4

只是

url: "/manage/update_position/?nocache="+Math.random(), 

更换

url: "/manage/update_position/", 

强制重新加载页面未使用浏览器的缓存。

+1

这可能很容易将路由系统弄糟。如果您要手动执行此操作,请将其设为请求参数:'“/ manage/update_position /?nocache =”+ Math.random()' – lonesomeday 2010-10-30 19:35:55

+0

是的,您绝对正确。我忘了在我原来的帖子中加入一个''“?”。它应该是:''/ manage/update_position /?“+ Math.random(),' – remi 2010-11-01 20:48:53