2010-10-30 72 views
5

Tengo un cms en el que puedo cambiar la posición de los objetos. Después de cada cambio de posición, la llamada ajax actualiza toda la lista de objetos. Pero desafortunadamente, algunos datos se almacenan en caché y no hay cambios visibles. ¿Hay alguna manera de obligar a borrar el caché con javascript/request/other? He intentado 'cache: false' en $.ajax pero no está funcionando.Forzar llamada ajax para borrar el caché

Aquí es una página de ejemplo:

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

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

Respuesta

2

Tienes

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

probar este lugar:

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

Además, parece que usted está tratando de reemplazar el contenido de la tabla .objects-list con un poco de HTML que incluye el elemento en sí <table> . Entonces tendría <table...><table...>, etc., después del reemplazo del contenido .html().

13

Lo cache: false hace es añadir el tiempo para los datos de la solicitud, por lo que cada solicitud es efectivamente único y, por tanto, puentea la memoria caché del navegador. Me pregunto si el hecho de que esté utilizando una cadena de datos en lugar de un objeto está causando problemas aquí. Trate de usar un objeto en su lugar:

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

Confirmo que esto realmente funciona. caché: falso agrega marca de tiempo a url y gracias a esto, cada vez que se carga contenido nuevo. – alekwisnia

4

basta con sustituir

url: "/manage/update_position/", 

con

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

para obligar a volver a cargar la página no utiliza la caché del navegador.

+1

Eso podría ensuciar fácilmente un sistema de enrutamiento. Si va a hacer esto manualmente, conviértalo en un parámetro de solicitud en su lugar: '"/manage/update_position /? Nocache = "+ Math.random()' – lonesomeday

+0

Sí, tiene toda la razón. Olvidé incluir un '"? ​​"' En mi publicación original. Debería haber sido: '"/manage/update_position /? "+ Math.random(),' – remi