102 votes

$.getJSON retour mise en cache des données dans IE8

Je suis en train de jouer autour avec ASP.net MVC et JQuery pour le moment. Je suis venu à travers comportements qui ne semble pas faire sens.

Je suis d'appel de JQuery $.getJSON fonction pour remplir certaines div. L'événement est déclenché sur l' $(document).ready événement. Cela fonctionne parfaitement.

Il y a un petit AJAX.BeginForm , ce qui ajoute de la valeur à être utilisé lors du remplissage des divs. Il appelle la fonction de télécommande correctement et sur le succès des appels à l'origine de la fonction javascript pour repeupler les divs.

Ici, c'est le bizarre: Dans FireFox et Chrome Tout fonctionne. MAIS Dans IE8 (Bêta) de ce deuxième appel à la remplir Div script (qui appelle l' $.getJSON fonction) mise en cache des données et de ne pas demander au serveur!

Espérons que cette question prend tout son sens: Dans une coquille de noix - Pourquoi est - $.getJSON la mise en cache de données? Et pourquoi est-ce seulement effectuer IE8?

106voto

Jitesh Patil Points 1159

Voila comment cela a fonctionné pour moi...

67voto

Nico Points 5756

Juste pour vous informer, Firefox et Chrome examiner toutes les requêtes Ajax non cachable. IE (toutes versions) traiter l'appel Ajax, comme les autres demande web. C'est pourquoi vous voyez ce comportement.
Comment faire pour forcer IE pour télécharger des données à chaque demande:

  • Comme vous l'avez dit, d'utiliser un "cache" ou "nocache" option dans JQuery
  • Ajouter un paramètre aléatoire à la demande (laid, mais il fonctionne :))
  • Sur le côté serveur, définissez possibilité de mise en cache (par exemple à l'aide d'un attribut, voir ci-dessous)

Code:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}

16voto

Andrew Harry Points 5488

Kent Merci pour votre réponse. À l’aide de $.ajax ('{cache : no} ") ; a parfaitement fonctionné. [modifier]

Ou au moins j’ai pensé que je l’ai fait. Semble que le jquery $.getJSON n’est pas la lecture de toutes les modifications apportées à l’objet de .ajax $.

La solution qui a fini de travail consistait à ajouter un nouveau paramètre manuellement

la date de la résolution est seulement à la minute ; qui signifie en fait cette solution encore caches pour jusqu'à une minute. Ceci est acceptable pour mon application.

11voto

Guy Points 16718

J’ai résolu ce même problème en plaçant l’attribut suivant sur l’Action dans le contrôleur :

4voto

Josh Points 906

Si vous utilisez ASP.net MVC, envisagez d’ajouter une méthode d’extension pour implémenter facilement sans mise en cache comme si :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X