Div dans Ajax ne fonctionne pas

Résolu/Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - Modifié par jordane45 le 3/03/2015 à 13:39
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 3 mars 2015 à 15:43
Bonjour, j'ai un petit problème sur lequel je me pète la tronche depuis plusieurs heures, je ne vois vraiment pas ce qui cloche !
J'effectue une requête SQL, je parcours les résultats et je mets un div à l'intérieur avec un bouton. En cliquant sur le bouton, j'envoie ce qui est dans le div par Ajax :
<script language="Javascript">
function Favoris()
{
 var XTicker = document.getElementById('ticker').innerHTML;
    var XFavoris = 1;
console.log(XTicker);
$.ajax({
type: "POST",
url: "Traitement.php",
data: {Favoris: XFavoris, Ticker: XTicker}
});
}
</script>


<?php
$req = $bdd->query('SELECT * FROM valeurs ORDER BY ProbaPlus DESC');
while($donnees = $req->fetch())
{
 
 ?>
  <div id="ticker"><?php echo $donnees['Ticker'];?></div>
 <input type="button" onclick="Favoris()">Favoris</input>
 <?php
}
?>



Mais le problème, c'est que dans mon div, il n'y a toujours que la première valeur renvoyée par la requête SQL, et il y a bien autant de bouton/div que de résultats de la requête !
J'avais déjà utilisé cette technique, mais jamais avec une requête SQL en "query", est-ce que cela pourrait venir de là ?
Merci d'avance pour vos réponses !
A voir également:

3 réponses

Bonjour
Ce n'est pas une question de query.
C'est que dans ton formulaire, tu crées plusieurs div qui ont tous le même id : ticker. Ceci est interdit, un id doit par définition être unique. Ton
document.getElementById('ticker')
prend le premier "ticker" qu'il trouve, il n'a aucune raison d'aller en chercher un autre. Il n'y a aucune association entre chaque bouton et chaque div, si ce n'est dans ta tête, mais ça, javascript ne peut pas le deviner.
Tu peux t'en tirer en créant des id uniques (en ajoutant un compteur à la fin de 'ticker' par exemple, et en le passant en paramètre à 'Favoris', qui ira ainsi chercher "son" id et pas le premier qui se présente.

J'avais déjà utilisé cette technique Non, tu n'avais certainement pas fait comme ça. Tu utilisais obligatoirement un moyen ou un autre pour distinguer tes div les uns des autres.
1
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié par jordane45 le 3/03/2015 à 13:57
Bonjour,

Je ne comprend pas trop....
Ton code PHP est celui appellé par ton ajax ?
Si oui... il ne mettra rien à jour... car il ne s'execute pas dans la page en cours....
Pour mettre à jour ta div.. il faut le faire dans le SUCCESS de ton ajax.

function Favoris(){
  var XTicker = document.getElementById('ticker').innerHTML;
   var XFavoris = 1;
  console.log(XTicker);
$.ajax({
type: "POST",
url: "Traitement.php",
data: {Favoris: XFavoris, Ticker: XTicker},
async: false,
dataType: "html",
success: function(reponse){
 console.log(reponse);
 $("#ticker").html(reponse);
 },
 error:function(reponse){
   alert('error !\n' + reponse);
  }
});
}
  • reponse etant le résultat (print ou echo) de ton fichier PHP...

par exemple :
<?php
 echo "ceci est la réponse !";
?>



EDIT : En lisant la réponse de le père.. j'ai compris ta question et ton souci....
En effet,... ta fonction ne marchera pas car tu utilises X fois le même ID....

Tu peux y remedier en faisant un truc du genre....
<?php
$req = $bdd->query('SELECT * FROM valeurs ORDER BY ProbaPlus DESC');
$r = 0;
while($donnees = $req->fetch()) {
 echo " <div id='ticker".$r."'>".$donnees['Ticker']."></div>";
 echo " <input type='button' onclick='Favoris(\"ticker".$r."\");'>Favoris</input>";
$r++;
}
?>

et dans ton JS:
function Favoris(id_div){
 var XTicker = $("#"+id_div).html();
 var XFavoris = 1;
console.log(XTicker);
$.ajax({
type: "POST",
url: "Traitement.php",
data: {Favoris: XFavoris, Ticker: XTicker}
});
}


Cordialement,
Jordane
0
Utilisateur anonyme
3 mars 2015 à 14:00
Bonjour jordane

Es-tu sûr que c'est une bonne idée de donner le code tout fait ? À mon avis, il ne faut pas le lâcher trop vite, ça dispense les gens de réfléchir à la réponse qu'on leur a faite.
Enfin, c'est juste mon avis, chacun fait comme il le sent.
À plus.
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
3 mars 2015 à 15:43
Merci beaucoup pour vos réponses !
Et pour disparaître avec les honneurs, je n'ai pris que quelques portions de code que Jordane a donné, je les ai modifié pour l'adapter au code pour ne pas faire de copier/coller pur et dur !
Encore merci !
0