2010-10-30 71 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