J'ai le code suivant faisant une demande GET sur une URL:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Mais le résultat renvoyé n'est pas toujours reflété. Par exemple, j'ai modifié la réponse qui a craché une trace de pile, mais la trace de pile ne s'est pas affichée lorsque j'ai cliqué sur le bouton de recherche. J'ai regardé le code PHP sous-jacent qui contrôle la réponse ajax et il avait le bon code et visiter la page a montré directement le résultat correct mais la sortie retournée par .load était ancienne.
Si je ferme le navigateur et le rouvre, cela fonctionne une fois, puis commence à renvoyer les informations périmées. Puis-je contrôler cela par jQuery ou dois-je avoir mes en-têtes de sortie de script PHP pour contrôler la mise en cache?
Voici un exemple de la façon de contrôler la mise en cache sur une base par demande
la source
Une façon consiste à ajouter un numéro unique à la fin de l'URL:
Où vous écrivez uniqueId () pour retourner quelque chose de différent chaque fois qu'il est appelé.
la source
(+new Date)
(ounew Date().getTime()
si vous êtes un adepte). Voir Comment obtenir un horodatage en JavaScript?Une autre approche pour mettre la ligne ci-dessous uniquement lorsque vous avez besoin d'obtenir des données du serveur, ajoutez la ligne ci-dessous avec votre URL ajax.
'? _ =' + Math.round (Math.random () * 10000)
la source
la source
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha est une bonne idée, j'utilise un mix.
Je crée une fonction
Et invoquer pour différentes parties de ma page par exemple sur init:
Init: fonction (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
ExampleJS.LoadWithoutCache (actionUrl2, "div2"); ExampleJS.LoadWithoutCache (actionUrl3, "div3"); }},
la source
C'est particulièrement gênant dans IE. Fondamentalement, vous devez renvoyer les en-têtes HTTP «sans cache» avec votre réponse du serveur.
la source
Pour PHP, ajoutez cette ligne à votre script qui fournit les informations que vous souhaitez:
ou, ajoutez une variable unique à la chaîne de requête:
la source
N'utilisez PAS d'horodatage pour créer une URL unique car chaque page que vous visitez est mise en cache dans DOM par jquery mobile et vous rencontrez rapidement des problèmes de manque de mémoire sur les mobiles.
Ce code s'active avant le chargement de la page, vous pouvez utiliser url.indexOf () pour déterminer si l'URL est celle que vous souhaitez mettre en cache ou non et définir le paramètre de cache en conséquence.
N'utilisez pas window.location = ""; pour changer l'URL, sinon vous accédez à l'adresse et pagebeforeload ne se déclenche pas. Pour contourner ce problème, utilisez simplement window.location.hash = "";
la source
Si vous souhaitez vous en tenir à la méthode .load () de Jquery, ajoutez quelque chose d'unique à l'URL comme un horodatage JavaScript. msgstr "+ nouveau Date (). getTime ()". Remarquez que j'ai dû ajouter un "& time =" afin qu'il ne modifie pas votre variable pid.
la source
Vous pouvez remplacer la fonction de chargement jquery par une version dont le cache est défini sur false.
Placez-le quelque part dans le monde où il s'exécutera après le chargement de jquery et vous devriez être prêt. Votre code de chargement existant ne sera plus mis en cache.
la source
Essaye ça:
Cela fonctionne bien quand je l'ai utilisé.
la source
J'ai remarqué que si certains serveurs (comme Apache2) ne sont pas configurés pour autoriser ou refuser spécifiquement toute "mise en cache", le serveur peut par défaut envoyer une réponse "en cache", même si vous définissez les en-têtes HTTP sur "no-cache". Assurez-vous donc que votre serveur ne "cache" rien avant d'envoyer une réponse:
Dans le cas d'Apache2, vous devez
1) éditez le fichier "disk_cache.conf" - pour désactiver le cache ajoutez la directive "CacheDisable / local_files"
2) charger les modules mod_cache (Sur Ubuntu "sudo a2enmod cache" et "sudo a2enmod disk_cache")
3) redémarrez Apache2 (Ubuntu "sudo service apache2 restart");
Cela devrait faire l'affaire en désactivant le cache du côté des serveurs. À votre santé! :)
la source
Ce code peut vous aider
la source