Je joue avec ASP.net MVC et JQuery pour le moment. J'ai rencontré un comportement qui ne semble pas logique.
J'appelle la $.getJSON
fonction de JQuery pour remplir certains div. L'événement est déclenché sur l' $(document).ready
événement. Cela fonctionne parfaitement.
Il y a un petit AJAX.BeginForm
qui ajoute une autre valeur à utiliser lors du remplissage des divs. Il appelle la fonction distante correctement et en cas de succès appelle la fonction javascript d'origine pour repeupler les divs.
Voici la partie étrange: Dans FireFox et Chrome - Tout fonctionne. MAIS Dans IE8 (bêta), ce deuxième appel au script populate Div (qui appelle la fonction $ .getJSON) obtient les données en cache et ne demande pas au serveur!
J'espère que cette question a du sens: En bref - Pourquoi $.getJSON
obtenir des données en cache? Et pourquoi n'affecte-t-il que IE8?
la source
Réponses:
Juste pour vous le faire savoir, Firefox et Chrome considèrent toutes les requêtes Ajax comme non cachable. IE (toutes les versions) traite l'appel Ajax comme toute autre requête Web. C'est pourquoi vous voyez ce comportement.
Comment forcer IE à télécharger des données à chaque demande:
Code:
la source
Voilà comment cela a fonctionné pour moi ...
la source
$.ajaxSetup({ cache: true });
juste après legetJSON()
et non dans le rappel.Merci Kent pour votre réponse. Utilisation de $ .ajax ('{cache: no}'); a parfaitement fonctionné. [Éditer]
Ou du moins je pensais l'avoir fait. Il semble que le jquery $ .getJSON ne lit pas les modifications apportées à l'objet $ .ajax.
La solution qui a fini par fonctionner était d'ajouter un nouveau paramètre manuellement
la résolution de la date est seulement à la minute; ce qui signifie effectivement que cette solution reste en cache pendant jusqu'à une minute. Ceci est acceptable pour mes besoins.
la source
Math.Random()
pourrait être utilisé, ses résultats seront inconnus et vous pourriez obtenir le même nombre deux fois de suite (ou plus). l'utilisationnew Date().getTime()
garantira qu'il ne sera jamais répété. (à moins que vous ne puissiez remonter le temps;))J'ai résolu ce même problème en plaçant l'attribut suivant sur l'action dans le contrôleur:
la source
Si vous utilisez ASP.net MVC, envisagez d'ajouter une méthode d'extension pour implémenter facilement aucune mise en cache comme ceci:
la source
Vous devrez peut-être envoyer un disjoncteur de cache.
Je recommanderais d'utiliser $ .ajax ({cache: no}) au cas où (ajoute un suffixe aléatoire à la requête get)
(J'ai tendance à utiliser $ .ajax partout ces jours-ci, plus accordable)
la source
Prêt pour LA réponse?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Alors, ajoutez simplement
au début de votre script et BANG ça marche!
la source