bonjour , je penche depuis un moment sur un problème avec mon code. actuellement j'ai : [code] var commsmur = $('button.commsload'); var id = $(commsmur).attr('id'); for(var i = 0, l = commsmur.length; i 20) { $("#comms_"+id).find('div:last').html(data); $("#comms_"+id).removeClass("commsoff"); $('a.suppcomLoad').click(SuppCom.click); $('button.prev_commsLoad').click(PreCommsMur.click); $('a.suppcomLoad').removeClass("suppcomLoad"); $('button.commsload').removeClass("commsload"); $('button.prev_commsLoad').removeClass("prev_commsLoad"); } }, error: function() { alert('Une erreur s\'est produite, merci de recharger votre page'); } }); var id = $(commsmur*).attr('id'); }[/code] et le problème c'est que sans "//alert(id);" , les id de "$("#comms_"+id)" sont toujours les memes ET avec "alert(id);" les id change selon "commsmur*" de FOR. comment régler le probleme sans mettre "alert()" ?

8 réponses


Guique
Réponse acceptée

@prbaron: je parlais des deux affectations de la boucle.

Est-ce que ta requête ajax modifie les éléments utiles à ta boucle?

Si tu as besoin que les modifications soient apportées suite au retour de ta requête Ajax avant de ré-assigné ta variable id, ton problème vient sans doute du côté asynchrone de ta requête.

Je m'explique: sans le alert, le code continue à se dérouler avant que ta requête ait abouti. Le alert quant à lui bloque ton code en attendant le click sur le bouton Ok et permet donc à ta requête d'aboutir et de faire les modifications attendues.
La fonction ajax définie par défaut le paramètre async à true.
Essaie de passer ta requête en synchrone pour voir.

Salut, peux tu nous montrer ton markup HTML stp ?

kaloutch
Auteur

je vois pas de quoi tu parle ( markup ) mais c'est ca ?

<div id="comms_'.$Content$i]'id'].'" class="commsoff bcrpmmc_comms">
<div class="bcrpmmcc_form">
<form method="post" class="Commentaire" data-id="'.$Content$i]'id'].'">
<textarea type="text" class="autosize" name="comms[message]"></textarea>
<input type="hidden" value="'.$Content$i]'id'].'" name="comms[id]">
<input type="hidden" value="'.$Profil'id'].'" name="comms[id_a]">
<input type="submit" class="" value="dire">
</form>
</div>
<div class="bcrpmmcc_content"></div>
</div>

Bonjour,

Pourquoi définies-tu ta variable id en fin de boucle pour à nouveau la définir en début de boucle?
Quand tu dis que dans ton alert, tes id sont bons: est-ce que ton traitement ajax s'effectue aussi correctement avec ces alert()?

@Guique : quand tu regardes le code, id n'est pas le même dans sa première déclaration et dans sa deuxième. Par contre c'est une mauvaise idée de les appeler de la même manière.

Peux tu nous montrer le markup de ton bouton ('button.commsload') stp ? Le markup est bien la trame HTML.

kaloutch
Auteur

@Guique : j'ai mis la variable en fin pour tester si une variable différente s'enregistre , mais avec ou sans sa change rien .
et pour ta deuxième question c'est, oui . avec le " alert " le code marche parfaitement, mais j'ai un alert qui s'affiche (normal) .
sans "alert", plus rien ne marche, c'est le meme id tous le temps.

<button id="'.$Content$i]'id'].'" class="b_mur comms commsload">commentaire</button></div>
</div>
<div id="comms_'.$Content$i]'id'].'" class="commsoff bcrpmmc_comms">
<div class="bcrpmmcc_form">
<form method="post" class="Commentaire" data-id="'.$Content$i]'id'].'">
<textarea type="text" class="autosize" name="comms[message]"></textarea>
<input type="hidden" value="'.$Content$i]'id'].'" name="comms[id]">
<input type="hidden" value="'.$Profil'id'].'" name="comms[id_a]">
<input type="submit" class="" value="dire">
</form>
</div>
<div class="bcrpmmcc_content"></div>
</div>
</div>

J'ai un peu de mal à comprendre ton code...

Tu as plusieurs boutons .commsload qui récupère chacun un id.
Tu souhaites faire une boucle avec tous les boutons

Tu récupères l'id du bouton.

Tu envoies une requête AJAX avec l'id du bouton
Tu effectues diverses actions suivant le résultat de la requête.

C'est bien ça ?

kaloutch
Auteur

@prbaron :

oui , je récupère les commentaires les 20 derniers commentaires .

@Guique :

Merci beaucoup , c'est exactement çà ! mon problème est résolu.