Page 1 sur 1

jquery: forcer le rafraîchissement des données

Publié : 14 déc. 2008, 19:37
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à.

Publié : 14 déc. 2008, 23:25
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.

Publié : 15 déc. 2008, 01:19
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

Publié : 16 déc. 2008, 23:52
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

Publié : 28 janv. 2009, 10:28
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)

Publié : 28 janv. 2009, 11:43
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 ;-)

Publié : 28 janv. 2009, 16:17
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

Publié : 28 janv. 2009, 16:52
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 ;) .

Publié : 28 janv. 2009, 17:42
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:

Publié : 28 janv. 2009, 19:03
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