Salut tout le monde
Je souhaiterais rendre un contenu dynamique, ainsi voir par exemple des infos flash s'actualiser toutes les 5secondes. Le problème, c'est que je ne vois pas comment alimenter un tableau en javascript. Je précise que j'ai créé une fonction renvoyant toutes les valeurs sous forme d'un tableau, mais en php.
Je vous remercie d'avance pour vos réponses
Oriente-toi vers AJAX ![]()
En effet il faut utiliser AJAX. Tu renseignes ta callback vers ta page de traitement PHP et le tour est joué. ![]()
je vais tester, merci
Je ne trouve pas d'exemple concret =/ je vais continuer a chercher encore, si vous avez des pistes, avec du code en exemple, je suis prenneur
En 1 seconde sur Google.
/* Exemple d'utilisation asynchrone de l'API Ajax */
// Les fonctions anonymes définies dans "success" et "error" ne s'exécuteront qu'une fois l'appel Ajax terminé,
// et en fonction de la réussite ou de l'échec de celui-ci
$.ajax({
"url": "http://odata.netflix.com/Catalog/Titles" +
"?$filter=substringof('indiana jones',Name)&$format=json&$callback=callback",
"dataType": 'jsonp',
"type": 'GET',
"jsonpCallback": 'callback',
"success": function (data, textStatus, jqXHR) {
console.log("L'appel Ajax est une réussite.");
},
"error": function (jqXHR, textStatus, errorThrown) {
console.log("L'appel Ajax est un échec.");
}
});
Source : http://fguillot.developpez.com/
En PasteBin si ça peut t'aider :
http://pastebin.com/ZQdNTPw6
C'est du jQuery au passage.
Juste une remarque de terminologie, la callback c'est ce qui est appelé *après* quelque chose. Typiquement, il va faire une requête faire une page est une page est callback sur une fonction quand c'est terminé.
Exact. §
"Tu renseignes ta callback vers ta page de traitement PHP", j'ai mis "vers" au lieu de "et". ![]()
Merci pour vos réponses, je vais tester ça!
Bon, après avoir fais quelques tests je me suis ramassé, j'ai fais ça a l'aide de corrigés, mais j'ai un peu de mal :
<script type="text/javascript">
function getRequeteHttp(){
var xhr=null;
if (window.XMLHttpRequest){ //navigateurs non MS
xhr=new XMLHttpRequest();
}
else
if (window.ActiveXObject){ //versions de MS IE
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
else {
alert("navigateur non comptatible Ajax...");
}
return xhr;
}
function recevoirReponse(xhr){
if (xhr.readyState == 4 && xhr.status==200) {
interval=setInterval("changeMessage()(xhr.response
Text)",4000);
//changeMessage()(xhr.responseText);
}
}
function getFlash(idFlash){
var xhr = getRequeteHttp();
xhr.open("POST", "include/chercherFlash.php", true);
xhr.onreadystatechange = function(){
recevoirReponse(xhr);
}
xhr.setRequestHeader('Content-Type','application/x
-www-form-urlencoded');
xhr.send(idFlash);
}
function changeMessage(){
var txtDocument=xhr.responseText;
texte=txtDocument.split('/');
alert(texte[1]);
document.getElementById("libelle").innerHTML=texte
[1];
document.getElementById("contenu").innerHTML=texte
[2];
document.getElementById("dateD").innerHTML=texte[3
];
document.getElementById("dateF").innerHTML=texte[4
];
}
</script>
<div id = "flash"> <span id="libelle"></span>
</div>
Le script Ajax :
<script type="text/javascript">
function getRequeteHttp(){
var xhr=null;
if (window.XMLHttpRequest){ //navigateurs non MS
xhr=new XMLHttpRequest();
}
else
if (window.ActiveXObject){ //versions de MS IE
xhr=new ActiveXObject("Microsoft.XMLHTTP");
}
else {
alert("navigateur non comptatible Ajax...");
}
return xhr;
}
function recevoirReponse(xhr){
if (xhr.readyState == 4 && xhr.status==200) {
setInterval(changeMessage(xhr.responseText),4000);
}
}
function getFlash(idFlash){
var xhr = getRequeteHttp();
xhr.open("POST", "chercherFlash.php", true);
xhr.onreadystatechange = function(){
recevoirReponse(xhr);
}
xhr.setRequestHeader('Content-Type','application/x
-www-form-urlencoded');
xhr.send(idFlash);
}
function changeMessage(){
var txtDocument=xhr.responseText;
texte=txtDocument.split('/');
alert(texte[1]);
document.getElementById("libelle").innerHTML=texte
[1];
document.getElementById("contenu").innerHTML=texte
[2];
document.getElementById("dateD").innerHTML=texte[3
];
document.getElementById("dateF").innerHTML=texte[4
];
}
</script>
le script php qui me permet d'afficher les bonnes valeurs :
$pdo = PdoAmicales::getPdoAmicales();
$idFlash = $_POST['idFlash'];
$req = "select * from flash where id=$id";
$rs = PdoAmicales::$monPdo->query($req);
$flash = $rs->fetchAll();
if (count($flash) != 0) {
echo $flash[0]['id'] . "/" . $flash[0]['libelle'] . "/" . $flash[0]['contenu'] . "/"
. $flash[0]['dateD'] . "/" . $flash[0]['dateF'] . "/";
}
Enfin, le jeu d'essais :
<div id="flash"><span id="libelle"></span>
<?php
$i = 1;
foreach ($desFlash as $uneFlash) {
$id = $uneFlash['id'];
?>
<a href='javascript:void(0)' onClick='getFlash(<?php echo $id; ?>.value)'><?php echo $i; ?></a>
<?php
$i++;
}
?>
</div>
je suis un peu perdu, je m’appuie sur plusieurs exemples, mais aucun alert de test ne fonctionne :s
Commence par expliquer complètement ce que tu veux faire en AJAX. Et mets ton code sur wall.deblan ou Pastebin parce que là je n'ai même pas envie de regarder.
pour le code JS :
http://pastebin.com/Rcz0AKms
pour la partie affichage :
http://pastebin.com/kbaFCB85
enfin la fonction ou je récupère la liste des flash :
http://pastebin.com/tSGH1qWm
explication : j'ai une div, qui contiendra des information flash, il peut y en avoir plusieurs, donc il faut les rendre visible, a intervalle régulière, sans que l'utilisateur ai a aller de lui même voir chaque flash.
J'avais donc pensé au JS, puis vous m'avez conseillé Ajax (j'ai un peu de mal avec le JS, je débute) avec le JS je fais appel a une page php qui récupère une flash en fonction de l'id de la flash envoyé, que je retourne sous forme d'une chaine de caractere, et que je split dans le JS pour l'affichage
Si c'était pour faire un banal copié/collé du code sans indentation avec les retours chariot de JVC, tu aurais plus t'abstenir de poster. Faites des efforts si vous avez envie qu'on vous aide.
pour le code JS :
http://pastebin.com/Rcz0AKms
pour la partie affichage :
http://pastebin.com/kbaFCB85
enfin la fonction ou je récupère la liste des flash :
http://pastebin.com/tSGH1qWm
(mis a jour)
pour la partie affichage
http://pastebin.com/WzDAVnek
pour le code JS :
http://pastebin.com/gGgfmQ9P
enfin la fonction ou je récupère la liste des flash :
http://pastebin.com/sh37esj8
Désolé je croyais qu'on pouvais mettre a jour le code sans avoir a donner un nouveau lien
Il y a déjà 2 problèmes ici :
$idFlash = $_POST['idFlash'];
$req = "select * from flash where id=$id";
1- mauvais nom de variable
2- injection SQL possible : tu utilises PDO donc tu prépares tes reqêtes et tu bind les paramètres.
Merci, je n'avais pas vus le problème de la variable, et pour ce qui est des injections sql, je m'étais pris la tete au début parce que... la fonction plantait ^^ pdo semble contrer directement les injections sql, enfin c'est ce que j'en ai déduit
Ça ne s'affiche toujours pas :s
j'ai ouvert la console web, et ça m'affiche :
SyntaxError : identifier starts immediatly after numeric literal