jQuery.get ne reçoit pas la dernière version du fichier sur le serveur

Duplication possible:
Empêcher la mise en cache de l’appel AJAX

J’utilise jQuery pour lire un petit fichier texte sur un serveur Web:

jQuery.get('scores.txt', function(data) { parseScores(data); }); 

Cela fonctionne presque comme il se doit – mais il ne charge pas de manière fiable la dernière version du fichier. Même si story.txt a changé, l’actualisation de la page renvoie exactement la même valeur pour les data .

Le serveur est Mac Apache standard, sans cache, et il est identique à celui du client. En théorie, il n’ya pas d’autres caches entre les deux.

Si je charge http://127.0.0.1/scores.txt dans le navigateur, il ouvre toujours la dernière version.

En regardant le journal Apache, pour les fois où la page ne parvient pas à mettre à jour, la demande jQuery GET n’atteint jamais le serveur.

Je soupçonne que je pourrais avoir besoin de déplacer cette question vers serverfault.com, mais est-ce que quelqu’un peut voir un problème avec mon JavaScript qui le ferait se comporter de cette façon?

Existe-t-il un moyen d’utiliser JavaScript / jQuery pour forcer le navigateur à demander une nouvelle copie du fichier?

Merci d’avance.

Essayez d’append du cache: false à vos options AJAX:

 jQuery.ajax({ url: 'scores.txt', dataType: 'text', type: 'GET', cache: false, success: parseScores }); 

jQuery appenda automatiquement un horodatage anti-cache à chaque requête.

Vous pouvez append un identifiant unique à chaque requête pour arrêter la mise en cache de la réponse par le navigateur. Ce n’est pas parce que le client se trouve sur le même périphérique que le serveur Web que le navigateur met en cache la réponse (cela n’empêche pas non plus certains serveurs proxy de s’impliquer dans le bon environnement).

 jQuery.get('scores.txt', { now: jQuery.now() }, function(data) { parseScores(data); }); 

Ajouter un cachebuster (par exemple timestamp) au nom du fichier comme ceci.

 jQuery.get('scores.txt?' + (+new Date()), function(data) { parseScores(data); }) 

Utilisez un bus de cache.

La méthode Ajax de JQuery a un paramètre de cache pour le faire pour vous: https://learntech.imsu.ox.ac.uk/blog/?p=266

La solution de @Peter J est la plus propre si vous ne souhaitez pas mettre en cache le contenu d’un serveur sur une seule page: https://stackoverflow.com/a/735101/109941