2010-10-30 22 views
5

Ho un cms in cui posso cambiare la posizione degli oggetti. Dopo ogni cambio di posizione, una chiamata ajax aggiorna l'intero elenco di oggetti. Ma sfortunatamente alcuni dati sono memorizzati nella cache e non sono visibili modifiche. C'è un modo per forzare la cancellazione della cache con javascript/request/other? Ho provato 'cache: false' in $.ajax ma non funziona.Forza chiamata ajax per svuotare la cache

Ecco una pagina di esempio:

http://ntt.vipserv.org/manage/playforward

E i miei 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; 
}); 

risposta

2

Hai

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

Prova a modificare:

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

Inoltre, sembra che si sta cercando di sostituire il contenuto della tabella .objects-list con un po 'HTML che include l'elemento in sé <table> . Quindi avresti <table...><table...>, ecc., Dopo la sostituzione del contenuto dello .html().

13

Cosa cache: false non fa altro che aggiungere il tempo per i dati di richiesta, in modo che ogni richiesta è effettivamente unico e quindi ignora la cache del browser. Mi chiedo se il fatto che stai usando una stringa di dati piuttosto che un oggetto stia causando problemi qui. Prova ad utilizzare un oggetto invece:

$.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

Io confermo - questo funziona davvero. cache: false aggiunge timestamp a url e grazie a questo, ogni volta viene caricato un nuovo contenuto. – alekwisnia

4

basta sostituire

url: "/manage/update_position/", 

con

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

per forzare ricaricare la pagina non si utilizza la cache del browser.

+1

Ciò potrebbe facilmente mandare in su un sistema di routing. Se hai intenzione di farlo manualmente, rendilo invece un parametro di richiesta: '"/manage/update_position /? Nocache = "+ Math.random()' – lonesomeday

+0

Sì, hai assolutamente ragione. Ho dimenticato di includere un "?" "Nel mio post originale. Dovrebbe essere: '"/manage/update_position /? "+ Math.random(),' – remi

Problemi correlati