[AJAX] Tuto trop flou

Fermé
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 - 26 févr. 2012 à 12:41
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 - 2 mars 2012 à 01:04
Bonjour,

voilà jme met au AJAX "grace" à un tuto de chez xul, mais il est tres flou et on s'y perd tres vite quand on apprend ( ce qui est un probleme dans un tuto justement )

du coup jme retrouve avec ceci :

un fichier ajax.js

function createXHR() {
 var request = false;
        try { request = new ActiveXObject('Msxml2.XMLHTTP'); }
        catch (err2) {
            try { request = new ActiveXObject('Microsoft.XMLHTTP');  }
            catch (err3) {
	try { request = new XMLHttpRequest(); }
	catch (err1) {request = false;	}
            }
        }
    return request;
}


et je ne sais pas ou je dois metre mon fichier.php qui contiens le code que je veux ( je veut le faire marcher en appel onload="" dans le body et un setTimeout() régulier pour rafraichir regulierement.
Je ne sais pas non plus comment récupérer le resultat de mon .php ( qui contiendra une requette sql donc une multitude de resultat ( il y aura un while pour récupérer l'integralité de la table )

Quelqu'un peut m'éclairer ne serais-ce qu'un petit peu ?

Merci beaucoup d'avance, je nage dans la vase ^^



A voir également:

3 réponses

Sombresonge Messages postés 106 Date d'inscription mardi 7 février 2012 Statut Membre Dernière intervention 19 avril 2015 9
Modifié par Sombresonge le 26/02/2012 à 14:25
Ci-dessous le code complet pour une utilisation simple d'Ajax. Tu n'as plus qu'à modifier le nom de la page php que tu souhaites appeler, et à traiter les données de retour (xhr.responseText)

var xhr;    
         
     if (window.XMLHttpRequest) {     
         xhr = new XMLHttpRequest();    
     }    
     else if (window.ActiveXObject)     
     {    
         xhr = new ActiveXObject("Microsoft.XMLHTTP");    
     }    
      
  xhr.onreadystatechange = function() {    
   if (xhr.readyState==4 && xhr.status==200) {    
    // traitement des données de retour    
    // xhr.responseText;    
   }    
  };    
      
     //on appelle le fichier addspecialite.php    
     xhr.open("GET", "ici_j_appelle_ma_page_php",  true);     
     xhr.send(null);


Dans ta page PHP, le résultat de ta requête est renvoyée à ta fonction JS avec un simple echo (tu dois donc effectuer la mise en forme dans ta page PHP, ou si tu ne transmets que des variables, les concaténer de façon a pouvoir les récupérer facilement pour ton traitement JS, par exemple concaténer tes variables avec un caractère de séparation, et les dé-concaténer dans le JS avec la méthode split() ).
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
Modifié par jiantox le 29/02/2012 à 12:00
Salut et merci de ta reponse,

j'ai essayé de metre ceci en place mais je n'obtiens rien :

<script>
var xhr;    
if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }    
     else if (window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }    

xhr.onreadystatechange = function() { 
	if (xhr.readyState==4 && xhr.status==200) {    
    // traitement des données de retour    
    // xhr.responseText;    
var chaine = xhr.responseText;
var tableau = chaine.split('£');
document.getElementById('look').innerHTML = tableau[0]+' &bull; '+tableau[1]+' &bull; '+tableau[2];
   }    
  };    
      
     //on appelle le fichier addspecialite.php    
     xhr.open("GET", "look.php",  true);     
     xhr.send(null);
	
</script><code>

et dans mon look.php : 

<code><? 
include('/xxxx/xx/www/cfg2/opt.php'); 
$chk = $bdd->query("SELECT * FROM look"); 
while($chk2=$chk->fetch()) { 
echo $chk2[0].'£ '.$chk2[1].'£'.$chk2[2].'<br/>'; } 
?>


look.php me ressort bien test£test£test sur plusieurs lignes, mais l'index.php ( le js ) ne ressort rien.

Pourrais-tu m'expliquer comment gérer les réponses ( coté js ) ?
Et surtout comment faire pour que je puisse afficher l'integralité de la base ( un while dans le js ? )

Merci beaucoup de ton aide
0
Sombresonge Messages postés 106 Date d'inscription mardi 7 février 2012 Statut Membre Dernière intervention 19 avril 2015 9
29 févr. 2012 à 16:48
très probablement à cause de ton caractère de séparation qui n'est pas un standart en JS (il faudrait utiliser son équivalent octal pour que ça fonctionne). essaye en mettant par exemple des /, ça devrait mieux fonctionner.
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
29 févr. 2012 à 19:32
ça ne fonctionne que si je n'ai qu'un seul enregistrement dans ma base, mais je vais en avoir environ 100 ( et pour une dizaine de colones donc metre tableau[0]+'..'+tableau[1] ... etc c'est pas top :/

Comment je pourrais faire ça mieu ?
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
29 févr. 2012 à 19:46
Nan bah j'ai trouvé en fait rien de plus simple, j'ai tout mis en forme sous php, ça ressort tout en propre sous js :

function look() {
var xhr;    
if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }    
     else if (window.ActiveXObject) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }    

xhr.onreadystatechange = function() { 
	if (xhr.readyState==4 && xhr.status==200) {    
    // traitement des données de retour    
    // xhr.responseText;    
var chaine3 = xhr.responseText;
document.getElementById('look').innerHTML = chaine3;
   }    
  };    
      
     //on appelle le fichier addspecialite.php    
     xhr.open("GET", "look.php",  true);     
     xhr.send(null);
setTimeout("look()", 1000); }


et le php :

<?
include('/xx/xxxxx/www/cfg2/opt.php');
$chk = $bdd->query("SELECT * FROM look");
while($chk2=$chk->fetch()) {
echo $chk2[0].' | '.$chk2[1].' | '.$chk2[2].'<br/>'; }
?>


et tout roule :)

Merci à toi ;)
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
29 févr. 2012 à 19:53
autant pour moi y'a un probleme..

Pour que mon index.php s'actualise, il faut que j'ouvre la page look.php ( quand le js l'apel ça a l'air de ne pas faire de modifications, il faut que j'ouvre le look.php pour que le js change :/ )

est-ce que ça viendrais d'ici :
xhr.open("GET", "look.php", true);
xhr.send(null);
?
0
Sombresonge Messages postés 106 Date d'inscription mardi 7 février 2012 Statut Membre Dernière intervention 19 avril 2015 9
29 févr. 2012 à 22:44
Même si tu mets en forme dans le PHP, le résultat est récupéré dans ta fonction JS avec responseText. Pour l'intégrer à ta page courante, il faut que tu la modifies avec un innerHTML.
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
1 mars 2012 à 09:56
oui mais le probleme n'est plus là,

là le soucis c'est qu'il faut moi meme que j'appuis sur F5 en etant sur look.php pour que le js de l'index change aussi..

Que faire ?
0
Sombresonge Messages postés 106 Date d'inscription mardi 7 février 2012 Statut Membre Dernière intervention 19 avril 2015 9
1 mars 2012 à 10:33
Pas vraiment normal, en faisant un refresh de ta page ça ne devrait pas te la mettre à jour mais la remettre dans son état initial.

Tu as fais un alert de ton responseText pour voir ce qui t'était retourné ?
0
jiantox Messages postés 1081 Date d'inscription mardi 30 septembre 2008 Statut Membre Dernière intervention 26 janvier 2019 114
1 mars 2012 à 13:51
non mais il est bien retourné la réponse voulu sur la page look.php

le probleme c'est que le rafraichissement se fais bien sur mon index.php mais sans prendre en compte le look.php ( qui lui récupere juste l'integralité d'une table ).

et pour que le rafraichissement de l'index affiche bien les modification du look.php il faut que j'actualise le look.php :/

Si je l'actualise pas moi meme le contenu de l'index reste le meme ( alors que le contenu de la base a changé et donc le look.php devrai ressotir les nouvelles informations )
0