[AJAX] envoyer la requête
Résolu/Fermé
Annamenel
Messages postés
10
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
12 octobre 2008
-
30 juil. 2008 à 23:45
Annamenel Messages postés 10 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 12 octobre 2008 - 1 août 2008 à 11:13
Annamenel Messages postés 10 Date d'inscription mardi 10 juin 2008 Statut Membre Dernière intervention 12 octobre 2008 - 1 août 2008 à 11:13
A voir également:
- [AJAX] envoyer la requête
- Envoyer sms par internet - Guide
- Envoyer ma position - Guide
- Comment envoyer un message vocal - Guide
- Comment envoyer une invitation sur facebook - Guide
- Envoyer un colis anonyme par la poste - Forum Loisirs / Divertissements
5 réponses
Alkaaran
Messages postés
285
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2009
37
31 juil. 2008 à 14:49
31 juil. 2008 à 14:49
Ou est ton problème ?
<span id="valider_vote_<?php echo $donnees['id'];?>" > <a href="vote.php?vote=adore&id=<?php echo $donnees['id'];?>" onClick="vote('adore', '<?php echo $donnees['id'];?>');return false;">J'adore</a> ¤ <a href="vote.php?vote=naze&id=<?php echo $donnees['id'];?>" onClick="vote('naze', '<?php echo $donnees['id'];?>');return false;">C'est naze</a> </span>---
function vote(vote, id) { var xhr = getXMLHttpRequest(); if (xhr && xhr.readyState != 0) { document.location.href='vote.php?vote'+vote+'&id='+id; } xhr.onreadystatechange = function() { if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { document.getElementById('valider_vote_'+id).innerHTML = "Votre vote a été pris en compte, merci"; } else if(xhr.readyState == 2 || xhr.readyState == 3) { document.getElementById("valider_vote_"+id).innerHTML = "<img src=\"chargement.gif\" alt=\"Chargement\"/>"; } } xhr.open("GET", "vote.php?vote=" + vote + "&id=" + id + "", true); xhr.send(null); }
Annamenel
Messages postés
10
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
12 octobre 2008
5
31 juil. 2008 à 15:32
31 juil. 2008 à 15:32
Salut,
mon problème est que lorsque je clique sur le lien, ça m'envoie vers la page vote.php, ça exécute bien le script php mais du coup, ça ne lance pas la fonction vote.
J'utilise le procédé XMLHttpRequest et donc ça ne devrait pas changer de page.
En gros, je veux appeler cette fonction par une balise <a>
mon problème est que lorsque je clique sur le lien, ça m'envoie vers la page vote.php, ça exécute bien le script php mais du coup, ça ne lance pas la fonction vote.
J'utilise le procédé XMLHttpRequest et donc ça ne devrait pas changer de page.
En gros, je veux appeler cette fonction par une balise <a>
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
31 juil. 2008 à 21:19
31 juil. 2008 à 21:19
C'est normal, Ajax ne fonctionne pas du tout comme ça si tu mets document.location.href=... il est logique que ça appele ta page
Va revoir les tutos qui parlent de Ajax
Va revoir les tutos qui parlent de Ajax
Alkaaran
Messages postés
285
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
3 novembre 2009
37
31 juil. 2008 à 21:12
31 juil. 2008 à 21:12
Normalement le return false ; devrait annuler le lien et n'executer que le JavaScript, mais pour être sûr, remplace par ceci :
<span id="valider_vote_<?php echo $donnees['id'];?>" > <a href="#" onClick="vote('adore', '<?php echo $donnees['id'];?>');return false;">J'adore</a> ¤ <a href="#" onClick="vote('naze', '<?php echo $donnees['id'];?>');return false;">C'est naze</a> </span>
Annamenel
Messages postés
10
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
12 octobre 2008
5
31 juil. 2008 à 22:29
31 juil. 2008 à 22:29
@alain_42 : oui, c'est une erreur de ma part, un mauvais copier/coller lors de la création du script :p
@Alkaaran : j'ai essayé mais ça ne marche pas. J'ai même essayé de faire comme ça :
mais ça ne marche pas non plus. Peut être y-t-il une erreur dans le script ajax ?
ps : pour info, quand je clique, le return false ne marche pas car cela me change l'adresse et me mets le #
@Alkaaran : j'ai essayé mais ça ne marche pas. J'ai même essayé de faire comme ça :
<a href="javascript:vote('adore', '<?php echo $donnees['id'];?>');" >J'adore</a>
mais ça ne marche pas non plus. Peut être y-t-il une erreur dans le script ajax ?
ps : pour info, quand je clique, le return false ne marche pas car cela me change l'adresse et me mets le #
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
1 août 2008 à 10:56
1 août 2008 à 10:56
Le principe Ajax:
suite à un évenement dans ta page (click sur un lien, sur un bouton) la fonction ajax est lancée
elle fait une requette "en arrière plan" (sans rechargement de la page)
elle appele un script php (vot.php) sur le serveur en lui envoyant des valeurs en POST
<?php
//reucup valeurs envoyées
$valeur_vote=$_POST['valeur_vote']; // ça va contenir adore ou naze
$ip=$_POST['ip'];
//tu fais le traitement que tu veux, enregistrement etc..
//puis la réponse :
$reponse="Votre vote a été pris en compte, merci";
echo $reponse;
?></code>
@lain
suite à un évenement dans ta page (click sur un lien, sur un bouton) la fonction ajax est lancée
elle fait une requette "en arrière plan" (sans rechargement de la page)
elle appele un script php (vot.php) sur le serveur en lui envoyant des valeurs en POST
ce script reçoit ces valeurs, tu fais le traitement que tu veux ey qd c'est fini il envoie la réponse à Ajax au navigateur du poste client la partie traitement de la réponse à la réception, vient écrire cette réponse dans le div spécifié par l'id Alors essayes comme ça: ta page : <code><html> <head> <script language="javascript" type="text/javascript"> function vote(url,valeur_vote,ip_client,id_ecrire){ var http_request = false; //créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Abandon :( Impossible de créer une instance XMLHTTP'); return false; } http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse // lancement de la requete http_request.open('POST', url, true); //changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); data="valeur_vote="+valeur_vote+"&ip="+ip_client; //envoie des valeurs au script distant http_request.send(data); } function traitementReponse(http_request,id_ecrire) { var affich=""; if (http_request.readyState == 4) { if (http_request.status == 200) { // cas avec reponse de PHP en mode texte: //chargement des elements reçus dans la liste var reponse=http_request.responseText; //alert(reponse); obj = document.getElementById(id_ecrire); obj.innerHTML = reponse; } else { alert('Un problème est survenu avec la requête.'); } } } </script> </head> <body> ............... <?php $id=$donnees['id']; ?> <a href="javascript:vote('vote.php','adore','<?php echo $id; ?>','id_reponse');">J'adore</a><br /> <a href="javascript:vote('vote.php','naze','<?php echo $id; ?>','id_reponse');">C'est naze</a><br /> <div id='id_reponse'><!-- ici sera écrite la réponse Ajax --> </div> </body> </html>
et le script vote.php
<?php
//reucup valeurs envoyées
$valeur_vote=$_POST['valeur_vote']; // ça va contenir adore ou naze
$ip=$_POST['ip'];
//tu fais le traitement que tu veux, enregistrement etc..
//puis la réponse :
$reponse="Votre vote a été pris en compte, merci";
echo $reponse;
?></code>
@lain
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Annamenel
Messages postés
10
Date d'inscription
mardi 10 juin 2008
Statut
Membre
Dernière intervention
12 octobre 2008
5
1 août 2008 à 11:13
1 août 2008 à 11:13
Merci pour ton aide Alain_42, je vais sûrement le faire par ta méthode, à quelques détails près^^
Mais sinon en fait mon script marche, je m'étais juste trompé pour l'appeler :)
Merci à tous
Mais sinon en fait mon script marche, je m'étais juste trompé pour l'appeler :)
Merci à tous