jquery: forcer le rafraîchissement des données

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Répondre
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

jquery: forcer le rafraîchissement des données

Message par Ymai »

Bonjour
Je fais actuellement tourner une application utilisant des requêtes Ajax écrites en jquery ($.get)
Il s'agit de transmettre des grilles de chiffres.
Eventuellement, les valeurs transmises peuvent être modifiées après envoi. L'utilisateur retrouve alors ses chiffres extraits de la BD et il peut les corriger et les renvoyer.
(tout se passe un peu comme dans un tableur avec un fichier que l'on peut enregistrer et faire revenir pour le réenregistrer ensuite).

D'après ce que me rapportent plusieurs utilisateurs et ce que je pense avoir constaté moi aussi, les informations transmises à la base de données sont bien enregistrées.
Mais, lorsque l'on revient à la page d'encodage, les valeurs -en principe- extraites de la BD ne sont pas là. On peut retrouver la même page vide de chiffres telle qu'elle était avant l'envoi.
Et les utilisateurs de réencoder les chiffres. Et même d'être inquiets que les chiffres n'ont -pensent-ils- pas été transmis.
Pourtant, lorsque je regarde par la porte de derrière avec phpMyAdmin, je vois les valeurs envoyées.

D'après ce que je crois comprendre, ce pourrait être un simple effet de cache lié aux requêtes AJAX qui ne rafraîchissent pas les données.
Possible?
Mieux: quelqu'un aurait une solution ou une piste?
La réponse "Ne pas utiliser AJAX" ne me convient pas :D . L'application est en production et les résultats sont à utiliser dès mardi.

Merci déjà à ceux qui ont lu jusque là.
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Peut-être envoyer des en-têtes HTTP interdisant la mise en cache. Ça a un coût en bande passante évidemment.

Sinon vérifier tous les certains temps que l'affichage est synchro avec le serveur.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Benoit a écrit :Peut-être envoyer des en-têtes HTTP interdisant la mise en cache. Ça a un coût en bande passante évidemment.
La bande passante n'est pas un problème. Tout au plus une centaine d'utilisateurs susceptibles d'envoyer chacun quelques dizaines de nombres < 100.
Interdire la mise en cache, c'est des choses du genre

Code : Tout sélectionner

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Il semble que ce ne soit que pour IE. Et comme je recommande fortement FF (IE6 ne marche pas du tout)...
Benoit a écrit :Sinon vérifier tous les certains temps que l'affichage est synchro avec le serveur.
Mais ça, ce sont les utilisateurs qui me diront. Et si ce n'est pas synchro, je fais quoi?
C'est sur un mutualisé chez OVH. Je n'ai pas la main, en plus.

Merci d'avoir pris le temps de lire ma prose.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Bon, j'ai ajouté un paramètre bidon dans chaque requête sur la base MySQL: le temps système, avec un getTime().

Code : Tout sélectionner

var bidon= new Date().getTime();
	  $.get("inc/cotes.inc.php",
			  {'data': selection,
			   'fake': bidon},
			  function(resultat){
				$("#leCours").html(resultat)
			  })
Les utilisateurs ne me signalent plus de problème pour l'instant.
Mais c'est certainement encore à tester.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/2008111317 Ubuntu/8.04 (hardy) Firefox/3.0.4
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
Zebre12

Message par Zebre12 »

J'ai le même problème, et je pensais à la même solution (variable bidon)

Merci, appremment c'est la meilleure solution



Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Je n'avais pas suivi...
Ymai a écrit :Interdire la mise en cache, c'est des choses du genre

Code : Tout sélectionner

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
Ca c'est en HTML. Dans ton cas il faut les mettre dans les entêtes HTTP :

Code : Tout sélectionner

Pragma: no-cache
Expires: -1
en PHP typiquement on utilise la fonction header

Bien sûr c'est aussi valable aussi pour le HTML ;-)
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Bonjour
calimo a écrit : Expires: -1[/code]en PHP typiquement on utilise la fonction header
Certes, mais le code PHP produit ici un fragment de texte HTML qui s'insère gentiment dans le code déjà existant de la page. On parle bien d'Ajax...
Donc, pas de *header* possible. Ou si c'est que je me trompe?

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121621 Ubuntu/8.04 (hardy) Firefox/3.0.5
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
martin
Varan
Messages : 1074
Inscription : 21 janv. 2004, 16:23

Message par martin »

Ymai a écrit :Certes, mais le code PHP produit ici un fragment de texte HTML qui s'insère gentiment dans le code déjà existant de la page. On parle bien d'Ajax...
Donc, pas de *header* possible. Ou si c'est que je me trompe?
Soit, mais pour ce bout de HTML le navigateur fait bien une requête auprès du serveur, il y a bien négociation HTTP, donc rien ne t'empêche de spécifier des Headers via PHP ;) .
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

martin a écrit :Soit, mais pour ce bout de HTML le navigateur fait bien une requête auprès du serveur, il y a bien négociation HTTP, donc rien ne t'empêche de spécifier des Headers via PHP ;) .
Exact !
D'ailleurs, dans AJAX, dans le code javascript, n'utilises-tu pas l'objet XMLHttpRequest ? :wink:
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Bon sang, mais ça a l'air que bien sûr.
Je fais un noeud dans mon mouchoir pour quand je remettrai cet ouvrage sur le métier. Faudrait pas trop tarder, d'ailleurs.
Merci pour les réponses.


Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.5) Gecko/2008121621 Ubuntu/8.04 (hardy) Firefox/3.0.5
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité