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;
});
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top