Forza ajax chiamata a cancellare la cache
-
27-09-2019 - |
Domanda
Ho un cms in cui posso cambiare le posizioni degli oggetti. Dopo ogni posizione chiamata cambiamento ajax aggiorna l'intero elenco di oggetti. Ma purtroppo alcuni dati viene memorizzato nella cache e cambiamenti sono visibili. C'è un modo per forzare la cache compensazione con javascript / richiesta / altro? Ho provato 'la cache: false'. In $.ajax
ma non sta funzionando
Ecco una pagina di esempio:
http://ntt.vipserv.org/manage/playforward
E il mio 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;
});
Soluzione
Hai
$("objects-list").html(data["html"]);
Prova questo, invece:
$(".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 <table>
stesso. Così si avrebbe <table...><table...>
, ecc, dopo la sostituzione contenuti .html()
.
Altri suggerimenti
Che cache: false
fa è quello di aggiungere il tempo per i dati di richiesta, in modo che ogni richiesta è effettivamente unico e quindi bypassa la cache del browser. Mi chiedo se il fatto che si sta utilizzando una stringa di dati piuttosto che un oggetto sta 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]
}
});
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.