Partage
  • Partager sur Facebook
  • Partager sur Twitter

Refresh sans actualiser page (avec ajax)

Façon j'aime facebook

Sujet résolu
29 mars 2012 à 8:32:12

Bonjour à tous,

Toujours dans mon système de news je permet aux gens, d'aimer comme sur facebook. Seulement à chaque fois qu'ils aiment je fais un rechargement de la page pour envoyer ma requete sql.
J'aimerai en fait que lorsqu'ils cliquent sur j'aime, le compteur de personnes aimant s'incrémente sans recharger la page. De même lorsque qq ajoute une news, pas besoin de refresh la page, elle vient s'ajouter a la suite direct...
J'utilise déjà Ajax.
Une autre question, est-il possible de mettre plusieurs conditions a "onSuccess" ?

Un exemple de ma fonction ajax :

function ajoutcom(eid,lecome1) {
				if (lecome1 == '') {
					alert('Commentaire vide !');
					return false;
				} else {
					var lecome = '';
					lecome = encodeURIComponent(lecome1);
					new Ajax.Request('includes/calendar/rpc.php', {method: 'post', postBody: 'action=comEvent&eid='+eid+'&lecome='+lecome+'', onSuccess: hidelesdeux(eid)});
					recharge();
				}
			}	

			function recharge() {
				location.assign(location.href);
			}



Le probléme c'est que je suis obligé de recharger ma page à chaque fois... Et pas bien en plus :D

  • Partager sur Facebook
  • Partager sur Twitter
29 mars 2012 à 16:03:05

Bonjour,

Je comprends pas... Tu utilises ajax ET tu recharges ta page ? C'est quoi le but de la manoeuvre ?? :o

Romain
  • Partager sur Facebook
  • Partager sur Twitter
30 mars 2012 à 23:18:43

Ben en fait après la requête Ajax. Ça ne m affiche pas le nouvel événement. Je suis obligè d'actualiser la page pour le voir. D'où l'intérêt de dé rafraichir juste la Div en question
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
30 mars 2012 à 23:49:36

Tu utilises quel framework ?
Ajax n'est pas natif…

Mais il te suffit de récupérer le nombre de ta page au success et d'assigner cette valeur à l'élément qui a déclenché l'évenement.
Je ne vois pas ce qu'il y a de compliqué
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2012 à 22:51:53

Tu peux me filer un morceau de code stp ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
31 mars 2012 à 23:10:52

Nan.
Il y a un tuto sur ce site. (http://www.siteduzero.com/tutoriel-3-100294-l-objet-xmlhttprequest.html)
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2012 à 23:26:38

tu peux faire en sort que ta reqete ajax elle retourne genre le nombre de aiment et apres il suffit de changer le texte de ta page via javascript au moment ou tu recois la reponse ajax voila c'est tout pas besoin de recharge
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2012 à 16:34:21

J'ai réussi a utiliser ajax.updater pour faire ce que je veux.
Il me reste quand même un problème.
Voilà ce que je fais en gros, lors de l'ajout par exemple d'un commentaire.

1) Envoi de la requete ajax request pour ajouter dans la BDD le nouveau com.
2) Rafraichissement de la div en question
3) Affichage de celle-ci.

Tout ceci fonctionne bien. Malheureusement, il arrive des fois que la requête d'envoi en BDD soit trop rapide ou trop lente, donc du coup l'updater ne prend pas en compte le dernier commentaire.
J'aimerai donc executer ma requete Ajax, attendre la reponse et ensuite executer le rafraichissement.
Lorsque je met un sleep(1) au refresh ça fonctionne tout le temps mais ça fait bidouille, j'aimerai que ça soit géré au niveau des requetes ajax.
J'ai donc trouvé async: false ou encore du onComplete (j'utilisais onSuccess) mais aucune de mes modifs ne fonctionne. Voilà ce que j'ai acutellement.

function ajoutcom(eid,lecome1) {
				if (lecome1 == '') {
					alert('Commentaire vide !');
					return false;
				} else {
					var lecome = '';
					lecome = encodeURIComponent(lecome1);
					new Ajax.Request('includes/calendar/rpcbeta.php', {async: false, method: 'post', postBody: 'action=comEvent&eid='+eid+'&lecome='+lecome+'', onComplete: ajoutcommoi(eid)});
				}
			}		
			function ajoutcommoi(eid) {
				cachetoicom(eid);
				$('rape_'+eid+'').value = '';
				var pourun = "lescom_" + eid;
				new Ajax.Updater(pourun, 'includes/calendar/rpcbeta.php', {async: false, method: 'post', postBody: 'action=refreshCom&eid='+eid+'', onComplete: alorsmontre(eid)});
			}	
			function alorsmontre(eid) {	
				voircom(eid,'');
			}
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2012 à 16:37:59

Citation : dab

Tu utilises quel framework ?
Ajax n'est pas natif…


Hahaha excellent ! Ne dis rien plutôt que des conneries...
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 avril 2012 à 17:00:17

Citation : Desolation

Citation : dab

Tu utilises quel framework ?
Ajax n'est pas natif…


Hahaha excellent ! Ne dis rien plutôt que des conneries...


Excuse moi, mais sur Chrome, window.Ajax n'existe pas… ou alors je suis miope à 100%…
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2012 à 18:27:34

L'AJAX est fourni par l'objet XMLHttpRequest, c'est tout. Y'a pas d'histoire de framework. C'est juste ça qui me fait réagir.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 avril 2012 à 18:28:29

Oui, mais on n'est d'accord que window.Ajax qui existe, c'est ça que je voulais dire, qu'il nous dise de quoi il s'agit.
  • Partager sur Facebook
  • Partager sur Twitter
9 avril 2012 à 3:52:02

Bonsoir,

lokomass, si tu regardes le lien que te donnes dab tu verras que dans le tuto tu as une fonction onreadystatechange. Cette fonction te permet d'exécuter du code une fois que ta requête ajax a été effectuée (avec succès ou non, suivant tes conditions).

Bonne soirée,

Romain
  • Partager sur Facebook
  • Partager sur Twitter
10 avril 2012 à 13:47:39

En fait j'ai utilisé asynchronous:false et ça fonctionne très bien !
Merci
  • Partager sur Facebook
  • Partager sur Twitter
24 mai 2020 à 2:04:14 - Message modéré pour le motif suivant : Message complètement hors sujet


3 juillet 2020 à 14:49:35

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter