JeuWeb - Crée ton jeu par navigateur
[jQuery] Ajax - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [jQuery] Ajax (/showthread.php?tid=1252)



[jQuery] Ajax - phenix - 16-03-2008

Bonjour à tous,

voile, je commence tout doucement a refaire ma messagerie, et comme j'avais envie de tester jQuery et l'AJAX, j'ai décider de bricoler.

tout allais bien jusqu'à ce que je tente d'appeler une page dans la div qui contient :toilette: (quoi ? Vous avez rien comprit :heuuuSmile

Hum bon voici les fichier:

Fichier principal:

Code PHP :
<?php
include('session.php');
include(
'design/header_game_1.php');

if (
$_GET['action'] === 'env_mess')
{
include(
'libmessagerie/env_mess.php');
}
?>
<script language="JavaScript" src="jquery.js"></script>
<script type="text/javascript"><!--
$(document).ready(function () {

$("a.ajax")
.click(function() {
$("#box").load(this.href);
return false;});
});
// --></script>
<?php
include('design/header_game_2.php');
?>
<a href="libmessagerie/new_mess.php" class="ajax" />Nouveau message </a> | <a href="libmessagerie/boite_de_reception.php" class="ajax">Boite de réception</a> | <a href="libmessagerie/forum_de_guilde.php" class="ajax">Messagerie de Guilde</a> |<a href="libmessagerie/effacer.php?id=5" class="ajax">| Effacer |</a>
<br />
<br />
<br />
<div id="box"></div>
<?php
include('design/footer_game.php');
?>

et la boite de réception:

Code PHP :
<?php
include('../session.php');

$sql = mysql_query('SELECT
users.pseudo,
messagerie.objet,
messagerie.texte,
messagerie.guilde,
messagerie.id,
messagerie.etat

FROM messagerie

LEFT JOIN users ON messagerie.id_expediteur=users.id

WHERE id_joueur=\''
.$id.'\'
'
) or die(mysql_error());
echo
'
<a href="messagerie.php?d=d">Effacer tout les messages</a>
<br />
<br />
<table class="table_ingame">
<tr>
<td>Etat</td>
<td>Expéditeur</td>
<td>Objet</td>
<td>Action</td>
</tr>'
;
while (
$donnees = mysql_fetch_assoc($sql))
{
$expediteur = htmlspecialchars($donnees['pseudo']);
$objet = htmlspecialchars($donnees['objet']);
$texte = htmlspecialchars($donnees['texte']);
$objet = stripslashes($objet);
$texte = stripslashes($texte);


$form = '';
if (
$donnees['guilde'] === 'guilde')
{
$form = '<form method="post" action="messagerie.php?action=accep_guilde">
<input type="hidden" name="cree" value="'
.$guilde.'" />
<input type="hidden" name="mess" value="'
.$donnees['id'].'" />
<input type="submit" value="accepter" />
</form>'
;
}
if (
$donnees['guilde'] === 'groupe')
{
$form = '<form method="post" action="messagerie.php?action=accept_groupe">
<input type="hidden" name="groupe" value="1" />
<input type="hidden" name="mess" value="'
.$donnees['id'].'" />
<input type="submit" value="accepter" />
</form>'
;
}
if (
$donnees['etat'] === '0')
{
$img = '<img src="newmess.gif" alt="newmess" />';
}
else
{
$img = '<img src="mess.gif" alt="mess" />';
}
echo
'
<tr>
<td>'
,$img,'</td>
<td>'
,$expediteur,'</td>
<td><a href="showmess.php?mess='
,$donnees['id'],'" TARGET=popup onclick="window.open(\'\',\'popup\', \'width=600,height=400,left=0,top=0,scrollbars=yes\');"><img src="openmess.png" alt="message" />',$objet,'</a></td>
<td>
<a href="libmessagerie/effacer.php?id='
.$donnees['id'].'" class="ajax">| Effacer |</a>
</td>
</tr>'
;
}
echo
'
</table>'
;

mysql_close();
?>

Et le script qui doit être appeler pour le lien "effacer":

Code PHP :
<?php
include('../session.php');

//suppression de message
$mess = mysql_real_escape_string($_GET['id']);
$sql = mysql_query('SELECT id_joueur,etat FROM messagerie WHERE id=\''.$mess.'\'') or die(mysql_error());
$a = mysql_fetch_assoc($sql);
if (
$a['id_joueur'] !== $id) {exit('Tricher c\'est mal');}
if (
$a['etat'] === '0') { alert('Ce message n\'a pas encore été lu, vous devez le lire avant de pouvoir l\'effacer.'); }
else
{
$sql = mysql_query('DELETE FROM messagerie WHERE id='.$mess.'') or die(mysql_error());
}
mysql_close();
?>

Sauf que, l'ajax du lien effacer ne ce lance pas.

Merci de votre aide.


RE: jQuery + AJAX - Studio Gamboo - 16-03-2008

Le lien "effacer" est chargé par ajax, donc aprés le chargement de la page.
Du coup, ta fonction javascript ne "connait pas" le contenu que tu vient de charger, et donc aucun action ne peut être effectuée dessus.
Tu doit donc "ré-appliquer" la fonction onclick machin aprés le chargement de la boite de réception par ajax.
Euh je sais pas si c'est bien clair la Confused


RE: jQuery + AJAX - phenix - 16-03-2008

Citation :Euh je sais pas si c'est bien clair la Confused

Heu pas vraiment...


RE: jQuery + AJAX - Studio Gamboo - 16-03-2008

Alors voila :
Code :
<script type="text/javascript"><!--
$(document).ready(function () {  

  $("a.ajax")
  .click(function() {
                  $("#box").load(this.href);
                return false;});
});
// --></script>
Ce code ne s'applique qu'aux lien portant la classe ajax et étant déjà sur la page.
Quand tu charge la boite de réception par ce moyen, de nouveau liens portant la classe ajax apparaissant sur la page, mais javascript ne les "connait pas" car ils ont été rajoutés après la fin du chargement de la page.
Tu devrais donc rajouter quelque chose comme ça dans ta page boite de réception :
Code :
<script type="text/javascript"><!--
$(document).ready(function () {  

  $("a.suppression")
  .click(function() {
                  $("#box").load(this.href);
                return false;});
});
// --></script>
Et modifier la classe des liens de suppression en "suppression" à la place de "ajax".
C'est un peu crado comme solution, mais tu en découvrira d'autres en approfondissant jquery ^


RE: jQuery + AJAX - phenix - 17-03-2008

J'ai fait ce que tu as di, mais malheureusement sa ne marche pas :pleure2:

Code PHP :
<?php
include('../session.php');
echo
'<script type="text/javascript"><!--
$(document).ready(function () {

$("a.suppression")
.click(function() {
$("#box").load(this.href);
return false;});
});
// --></script>
'
;
$sql = mysql_query('SELECT
users.pseudo,
messagerie.objet,
messagerie.texte,
messagerie.guilde,
messagerie.id,
messagerie.etat

FROM messagerie

LEFT JOIN users ON messagerie.id_expediteur=users.id

WHERE id_joueur=\''
.$id.'\'
'
) or die(mysql_error());
echo
'
<a href="messagerie.php?d=d">Effacer tout les messages</a>
<br />
<br />
<table class="table_ingame">
<tr>
<td>Etat</td>
<td>Expéditeur</td>
<td>Objet</td>
<td>Action</td>
</tr>'
;
while (
$donnees = mysql_fetch_assoc($sql))
{
$expediteur = htmlspecialchars($donnees['pseudo']);
$objet = htmlspecialchars($donnees['objet']);
$texte = htmlspecialchars($donnees['texte']);
$objet = stripslashes($objet);
$texte = stripslashes($texte);


$form = '';
if (
$donnees['guilde'] === 'guilde')
{
$form = '<form method="post" action="messagerie.php?action=accep_guilde">
<input type="hidden" name="cree" value="'
.$guilde.'" />
<input type="hidden" name="mess" value="'
.$donnees['id'].'" />
<input type="submit" value="accepter" />
</form>'
;
}
if (
$donnees['guilde'] === 'groupe')
{
$form = '<form method="post" action="messagerie.php?action=accept_groupe">
<input type="hidden" name="groupe" value="1" />
<input type="hidden" name="mess" value="'
.$donnees['id'].'" />
<input type="submit" value="accepter" />
</form>'
;
}
if (
$donnees['etat'] === '0')
{
$img = '<img src="newmess.gif" alt="newmess" />';
}
else
{
$img = '<img src="mess.gif" alt="mess" />';
}
echo
'
<tr>
<td>'
,$img,'</td>
<td>'
,$expediteur,'</td>
<td><a href="showmess.php?mess='
,$donnees['id'],'" TARGET=popup onclick="window.open(\'\',\'popup\', \'width=600,height=400,left=0,top=0,scrollbars=yes\');"><img src="openmess.png" alt="message" />',$objet,'</a></td>
<td>
<a href="libmessagerie/effacer.php?id='
.$donnees['id'].'" class="suppression">| Effacer |</a>
</td>
</tr>'
;
}
echo
'
</table>'
;

mysql_close();
?>



RE: jQuery + AJAX - phenix - 18-03-2008

personne n'a de solution ? Ou personne n'utilise jQuery ?