[RESOLU] Rafraichire une div sans recharger la page

Eléphant du PHP | 291 Messages

29 oct. 2013, 01:22

Bonjour,

Dans une page j'utilise Fancybox pour faciliter la sélection de média tirés de ma base de donnée.
La sélection est ajoutée dans une variable de session sous forme de tableau (un peu comme un panier).

Je voudrais à la fermeture de ma popup Fancybox, re-lister mon tableau (ma variable de session) dans une div prévue à cette effet sans recharger intégralement la page.

Est-ce possible ?
Pouvez-vous m'aider ?

D'avance merci.

Eléphant du PHP | 291 Messages

30 oct. 2013, 09:41

Bonjour,

Je reformule ma question,

Est il possible via du javascript d'écrire en html le contenu d'une variable de session (php), au chargement de la page puis selon une action sur un bouton et/ou comme je le souhaite à la fermeture d'une iframe Fancybox de rafraichir ce contenu ?

D'avance merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 oct. 2013, 10:32

salut,

oui
- une requête ajax pour récupérer les données (le plus simple c'est sous forme json)
- les afficher la où tu le souhaite.

des frameworks / librairies JS comme ExtJs ou jQuery peuvent t'y aider simplement.

quand à la "sortie" de ton composant "fantaisie" peux être qu'il fournit un event ou quelque chose du genre pour le gérer.


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 291 Messages

30 oct. 2013, 10:45

Merci.

je vais regarder JSon (je ne connais pas du tout javascript/jquery).

Mon code fancybox est celui ci :

[javascript] $(".medias").fancybox({
maxWidth : 800,
maxHeight : 600,
fitToView : false,
width : '50%',
height : '70%',
autoSize : false,
closeClick : false,
openEffect : 'none',
closeEffect : 'none',
afterClose : function() {updateDivMedias()}
});
function updateDivMedias(){
$('#mediasContent').html('mon contenu');
} [/javascript]

Si j'ai bien compris la doc à chaque fermeture de la popup devrait s’exécuter la fonction updateDivMedias() et donc mettre à jour ma div id=mediasContent.
pour le moment cela ne s'affiche qu'une seule fois.

voila j'en suis la pour le moment.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 oct. 2013, 10:58

(je ne connais pas du tout javascript/jquery).
tu sais que ton code est fait avec jQuery ?

a priori lorsque tu ferme le truc la fonction updateDivMedias est appelée et va écrire 'mon contenu' dans la div mediasContent.

c'est dans cette fonction que tu doit faire ta requête ajax pour alimenter la div.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 291 Messages

30 oct. 2013, 11:17

oui c'est du jquery mais c'est surtout du copier/coller pour ce code!
je ne maitrise pas du tout ce langage, je découvre car je pense en avoir besoin pour rendre mon application plus agréable.

Eléphant du PHP | 291 Messages

30 oct. 2013, 12:47

Voici ma nouvelle fonction :

[javascript] function updateDivMedias(){
$.ajax({
type: "GET",
url: "<?php echo Router::webroot('ajax/ajax.php'); ?>",
success: function(msg){
$('#mediasContent').html(msg);
}
})
}
[/javascript]

ma page ajax.php contient :
<?php echo rand(1,6); ?>
Lors de la fermeture de la popup il m'affiche bien un chiffre aléatoire.
En revanche si je fais un echo de ma variable de session (et même en indiquant un session_start()) dans la page ajax.php il me dit qu'elle n'existe pas.

D'après différente lecture c'est du au fait que je ne transmet pas le session_id(), c'est bien cela ?

Comment faire alors ?

D'avance merci.

Eléphant du PHP | 291 Messages

30 oct. 2013, 12:58

correction dans la page ajax.php j'ai mis :
<?php
	session_name('nom');
	session_start();
	echo '<pre>';
		print_r($_SESSION);
	echo '</pre>';
?>
il me retourne bien toute mes variable de ma session mais pas celle que je viens de mettre à jour dans ma popup.
Pourtant si je l'affiche sur la page d'origine elle s'y trouve bien.

Quel test faire ?

Eléphant du PHP | 291 Messages

30 oct. 2013, 13:18

autant pour moi.
je retournais un tableau avec echo donc j'avais une erreur.

J'arrive maintenant à ce que je veux et cela fonctionne dans ie,chrome et firefox.

merci pour l'aide.