2010-10-30 3 views
5

J'ai un cms dans lequel je peux changer les positions des objets. Après chaque changement de position, l'appel ajax met à jour toute la liste des objets. Mais malheureusement, certaines données sont stockées dans le cache et aucune modification n'est visible. Existe-t-il un moyen de forcer le cache avec javascript/request/other? J'ai essayé 'cache: false' dans $.ajax mais ça ne marche pas.Forcer l'appel ajax pour effacer le cache

Voici une page d'exemple:

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

Et mes 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; 
}); 

Répondre

2

Vous avez

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

Essayez ceci:

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

, il semble aussi que vous essayez de remplacer le contenu de la table .objects-list avec certains html qui comprend l'élément lui-même <table> . Donc, vous aurez <table...><table...>, etc., après le remplacement du contenu .html().

13

Qu'est-ce que cache: false fait est d'ajouter le temps aux données de demande, de sorte que chaque demande est effectivement unique et par conséquent contourne le cache du navigateur. Je me demande si le fait que vous utilisiez une chaîne de données plutôt qu'un objet pose des problèmes ici. Essayez d'utiliser un objet à la place:

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

Je confirme - cela fonctionne réellement. cache: false ajoute l'horodatage à l'url et grâce à cela, chaque fois qu'un nouveau contenu est chargé. – alekwisnia

4

Il suffit de remplacer

url: "/manage/update_position/", 

avec

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

pour forcer recharger la page ne pas utiliser le cache du navigateur.

+1

Cela pourrait facilement dégringoler un système de routage. Si vous allez le faire manuellement, faites plutôt un paramètre de requête: '"/manage/update_position /? Nocache = "+ Math.random()' – lonesomeday

+0

Oui, vous avez absolument raison. J'ai oublié d'inclure un "?" Dans mon message original. Cela aurait dû être: "/ manage/update_position /?" + Math.random(), ' – remi

Questions connexes