Bonjour à tous,
Je souhaite afficher une image aléatoire sur mon site Internet toutes les 10 secondes (petit diaporama) et changer d'image à l'aide d'Ajax (l'image aléatoire est choisie par une fonction php)...
Le code se trouve dans une page appelée "image_aleatoire.php" qui est directement inclue dans toutes les pages du site (les images affichée étant de 200px de large, je n'affiche pas directement la page image_aleatoire).
La partie aléatoire est donc en php, et le principe est le suivant :
- Prendre un album photo au hasard (depuis une base de données)
- Choisir une photo dans cet album et l'afficher
Une fois l'image affichée, j'utilise une fonction Javascript (appelée visible() ) afin d'appliquer une opacité de 0 à 100% (permettant un affichage sous forme de fondu), puis j'utilise la fonction setTimeout( "invisible()", 10000 ) afin de replacer l'image en opacité 0 après 10 secondes (invisible est une fonction Javascript appliquant un fondu inverse au précédent).
Une fois mon image disparue, j'aimerais recommencer afin d'afficher une autre image (sans recharger toute la page avec la fonction location.reload(), qui me fait perdre le focus si je suis en train de mettre à jour du contenu)...
Je me suis donc tourné vers de l'Ajax, mon code est le suivant (la fonction invisible() appelle rechargerPage() une fois que l'image à une opacité de 0) :
Mon problème est le suivant : une fois arrivé dans la fonction setNewImage(), et donc denouveau dans ma fonction visible(), la même image apparaît (si je regarde la source de la page, je me rend compte qu'à chaque fois que l'image réapparaît, le chemin src de ma balise image est différent, donc ma page à été rechargée et la fonction aléatoire à correctement fonctionné, mais le navigateur m'affiche toujours la même image.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 var objXMLHttp = null; function GetXmlHttpObject() { if( window.XMLHttpRequest ) objXMLHttp = new XMLHttpRequest(); else if( window.ActiveXObject ) objXMLHttp = new ActiveXObject( "Microsoft.XMLHTTP" ); return objXMLHttp; } function rechargerPage() { objXMLHttp = GetXmlHttpObject(); if (objXMLHttp == null) { alert("Votre navigateur ne supporte pas les requêtes HTTP."); return false; } var url = "image_aleatoire.php"; // le script à appeller objXMLHttp.open( "POST", url, true ); //envoi en POST asynchrone // fonction à exécuter dès réception de la réponse objXMLHttp.onreadystatechange = setNewImage; objXMLHttp.send( null ); } function setNewImage() { if( objXMLHttp.readyState == 4 || objXMLHttp.readyState == "complete" ) visible(); }
J'ai d'abord pensé à mettre no-cache dans l'entête de la page, mais j'ai toujours le même problème.
Si je place un alert( document.getElementById( 'image' ).src ); dans ma fonction visible, je m'aperçoit que j'ai à chaque fois la première url (ce qui explique que mon image reste identique), mais le résultat obtenu ne correspond pas au contenu de ma balise img...
Est-ce quelqu'un à une idée de mon erreur ?
Est-ce qu'il est possible d'appeler une fonction php directement depuis une fonction Ajax ?
Je précise que les fonctions Javascript, Ajax et Php se trouvent dans ma page image_aleatoire.php, et que donc je ne change pas (et ne souhaite pas changer, si posible) de page lors du rafraichissement en Ajax.
Je précise également que je débute en Ajax, mais mes connaissances Php et Javascript sont plutôt bonnes.
Merci d'avance pour votre aide !