Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2007, 13h08   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Par défaut Problème affichage résultat ajax.request quand load page

Bonjour mesdames messieurs les développeurs,

j'utilise :
-windows vista/XP
-wamp (apache,php,mysql)
-IE7
-freebox
-librarie prototype.js


Je poste ce message car je suis face à un problème pour lequel je n'ai pu trouver l'ébauche d'une réponse sur le web.

J'essaye de développer une page dans laquelle le client va pouvoir entrer des données dans un <input type="text">. Ces données sont enregistrées avec l'ID du client dans une base MySql, via un AJAX.REQUEST. Ce dernier fait donc appel à un script php exécutant une requête SQL d'update. Ce partie fonctionne parfaitement.

Le problème vient d'un autre AJAX.REQUEST donc l'objectif est de remplir les <input type="text"> lors du load de la page. Lors du premier load, les données insérées dans les input sont bien celles de la base de données. Mais, si le client modifie ces valeurs et recharge la page sur la même session du navigateur internet, les données insérées dans les inputs sont celles du premier load, alors que la base de données a bien été updatée. Evidemment, en ouvrant une nouvelle session Internet Explorer, les dernières données sont bien affichées.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script src=\"http://marcoletpierre.dyndns.org/Functions/PrototypeJS/Prototype.js\" type=\"text/javascript\"></script>
<script type=\"text/javascript\">
 
Event.observe(window, 'load', init, false);
 
	function init(){
		new Ajax.Request(
			'GetProfileWithID.php',{
				method:'get',
				parameters: {MemberID2: $MemberID},
			        onSuccess: function(transport) {
					var tabl=transport.responseText.evalJSON();
					$('Name').value=tabl['Members_Name'];
					$('Surname').value=tabl['Members_Surname'];
			        }
			}
		);
 
	}
	function ChangeName(){
		new Ajax.Request(
			'UpdateProfile.php',{
				method:'get',
				parameters: {MemberID2: $MemberID, Name2: $('Name').value ,Surname2: $('Surname').value}
			}
		);
	}
</script>
En essayant de cerner la cause de mon tourment, j'ai remarqué que si, après que la page ait été chargée, je remplacais dans la function 'init' ceci:
Code :
1
2
$('Name').value=tabl['Members_Name'];
$('Surname').value=tabl['Members_Surname'];>
par cela :
Code :
1
2
$('Name').value='Hello';
$('Surname').value='World';>
lorsque la page est rechargée, les valeurs de l'input sont bien 'Hello' et 'World'. Ce qui permet de conclure que la fonction 'init' est exécutée sans que la variable 'tabl' ne soit véritablement rechargée.
Donc, comment dois-je m'y prendre pour que cette variable soit rechargée à chaque load de la page avec les données renvoyées par la requête SQL du script php visé?

J'espère avoir ne pas avoir été trop long ou trop confus, et j'espère également ne pas poser une question dont la réponse figure déjà quelque part (même si j'ai déja beaucoup cherché). Et d'autre part, je m'excuse d'avance si passe à coté d'une évidence, car je suis un débutant de quelques jours en javascript et ajax.

Merci d'avance pour vos réponses.

Pierre
marcolet.pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2008, 13h51   #2
Rédacteur/Modérateur
 
Avatar de marcha
 
Homme Marc Chappuis
Développeur Web
Inscription : décembre 2003
Messages : 1 535
Détails du profil
Informations personnelles :
Nom : Homme Marc Chappuis
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2003
Messages : 1 535
Points : 2 206
Points : 2 206
Salut,

il s'agit peut-être d'un problème de cache de la requête ajax ?

Tu pourrais essayer d'ajouter un paramètre changeant à ta requête
par exemple

parameters: {MemberID2: $MemberID, dummy: new Date().getTime() },

d'autre part, pour la mise à jour de tes donnée, une requête POST serait plus
judicieuse (voir les principes REST)
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !
marcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 11h56   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Salut Marcha,
Merci beaucoup à toi, ceci fonctionne parfaitement.
Mais est-ce la seule solution pour forcer la requête à être réexécutée?
En tout cas merci beaucoup.

Petite question: j'ai modifié le GET en POST, mais dans le cadre d'une requête AJAX en quoi est-ce plus judicieux ?

Pierre
marcolet.pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 15h35   #4
Rédacteur/Modérateur
 
Avatar de marcha
 
Homme Marc Chappuis
Développeur Web
Inscription : décembre 2003
Messages : 1 535
Détails du profil
Informations personnelles :
Nom : Homme Marc Chappuis
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2003
Messages : 1 535
Points : 2 206
Points : 2 206
Non, ce m'est pas la seule solution, tu peux aussi gérer les entêtes HTTP
appropriés pour la gestion du cache (pragma, cache-control, etc...)

Mais cette solution est simple et fiable.

En ce qui concerne l'usage d'un GET ou d'un POST, tu peux jeter un oeil
sur les principes REST (voir sous wikipedia est suivre les liens)

Un GET ne devrait pas affecter l'état de la base de donnée. Donc POST
est préférable pour faire un update.

Un exemple de mésaventure à l'appui:

J'avais fait des liens pour supprimer des enregistrements dans mon agenda
en utilisant la méthode GET, par exemple: remove.php?id=2

Tout marche bien jusqu'au jour ou google a indexé mon agenda, il a visité
tous les liens et donc supprimé tous les enregistrement :-)

C'est juste un exemple, qui n'a rien à voir avec Ajax. Mais il y a plein d'autres
bonne raisons pour utiliser les methodes appropriées suivant les actions
souhaitée (je te laisse lire les principes REST).
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !
marcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2008, 16h27   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 6
Points : 2
Points : 2
Merci beaucoup pour ton aide. J'irai faire un tour sur Wikipédia.

Bonne continuation
A bientôt

Pierre
marcolet.pierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h54.


 
 
 
 
Partenaires

Hébergement Web