Problem ds ma fonction ajax [Résolu]

Signaler
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
bonjour tout le monde
svp est ce que quelqu'un peut me dire c'est quoi le probleme dans ma fonction ajax,normalement cette derniére va permettre a des pages web de s'afficher d'une maniere cyclique .
l'url de ces pages sont enregistrés dans un fichier reponse.xml

function ajax()
{
    var xhr=null;
    
    if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) 
    {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //on définit l'appel de la fonction au retour serveur
    
    xhr.onreadystatechange = function() ;
    
    //on appelle le fichier reponse.xml
    xhr.open("GET", "file:///var/www/html/reponse.xml", true);
    xhr.send(null);
}

window.onload=function()
{
  var docXML= xhr.responseXML;
  var it = docXML.getElementsByTagName("donnee")
  var nom=unescape(self.location.pathname).split('/');
  var pag=nom[nom.length-1];
  var sui=0;
//on fait juste une boucle sur chaque element "donnee" trouvé
for (i=0;i= it.length )
                          { sui=0; }
                              break;
                     }
                 }
setTimeout ( function(){ 
location.replace( it[sui].firstChild.data ); },3000 ); }

</code>

20 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
la syntaxe c'est :
élément.évènement=function() { ... };
non pas
élément.évènement=function(); { ... }
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
nous fûmes 2 à vous indiquer des pistes ! ici
pourquoi créer un nouveau message, sans même
essayer ce que nous proposions ????
"47" vous disait :
>>à mon avis, ça serait plutôt
>>xhr.open("GET", "reponse.php", true);

et moi :

>>var it = docXML.getElementsByTagName("donnee");
>>for ( var i=0; i>{ alert ( it[i].firstChild.nodeValue ); }
>>déjà... sans préjuger du reste
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
et sans voir ce que renvoie le php,
on ne peut être sûr de rien,
( déjà suggéré aussi )
on ne peut pas tester, et détecter des
erreurs à l'oeil, comme ça, je ne suis
pas assez costaud...
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Re
non Bul c'est pas le meme message,celui la est un autre problème ds ma fonction ajax c'est pas l'interaction entre ajax et php , je viens d'ajouter une autre fonction qui permet l'affichage cyclique des page web et j'ai remplacé le fichier.php par un fichier.xml .
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
certes... j'avoue que je n'vais même pas lu !
comme vous n'aviez pas répondu sur l'autre....
handicapé nasal (**) : mes remarques restent les mêmes

(**) néanmoins.
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

oki bul ,
a vrai dire j'ai essayé :
>>xhr.open("GET", "reponse.php", true);
mais ce que vous m'avez proposer c'etait pas le cas, car j'ai meme pas bien compris ce que tu m'a proposer
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
si c'est une modif du précédent exemple
où vous remplacez du php par un xml,
déjà, c'est plus "sain", et on va pouvoir avancer

>>j'ai meme pas bien compris
déjà : vous utilisez it[sui].firstChild.data
et je vous disais : it[sui].firstChild.nodeValue

ensuite.. on peut voir ce .xml ? sinon
comment tester ?

et, en fin de boucle (?)
setTimeout ( function(){
location.replace( it[sui].firstChild.data ); },3000 ); }
vous remplacez donc la page actuelle
par "je ne sais quoi" de votre xml
vous êtes sûr que "sui" à la bonne valeur ?
nonobstant nodeValue à la place de data ?
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

jusqu'a maintenant je lance une des pages pour tester .
mon fichier xml c'est comme suit:

<?xml version="1.0"?>
<exemple>
<donnee>page1.html</donnee>
<donnee>page2.html</donnee>
<donnee>page3.html</donnee>
<donnee>page4.html</donnee>
</exemple>

>>vous êtes sûr que "sui" à la bonne valeur ?

voila la question c'est comment gérer le fichier xml .je vais chercher un peu
moi j'avais la fonction qui permet l'affichage cyclique sous forme d'une fonction javascript
dans laquelle est declaré un tableau qui contient les pages mais dans le but de pouvoir ajouter n'importe quel pages au tableau donc j'etait obliger de passer par ajax
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
vous ne savez pas debugger ???? (**)
je teste et, avec FF par exemple :
Erreur : syntax error
Fichier Source : file:...reponse.htm
Ligne : 13, Colonne : 40
Code Source :
xhr.onreadystatechange = function() ;
avec une flèche qui pointe le ;

pas été plus loin donc !!




(**)
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
>>comment gérer le fichier xml
j'ai mis quelques exemples sur CodesSources
ici pour un "simple"
on trouve aussi une doc abondante sur la toile
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

mais pour quoi dans mon avigateur FF ,n'affiche aucune erreur ??
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
pas avec ce que vous nous montrez ?!?
j'ai testé avec FF, dernière version 3.5.3,
ce doit être pareil avec toutes ( ou presque )
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

apparament, j'ai crée une fonction ajax(), mais elle ne semble jamais appelée...
xhr.onreadystatechange = function() ;


la declaration n'est pas bonne
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

oui merci
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

bonjour tout le monde
Re
bul:je vous remercie infiniment de m'avoir aider ,grace a vous j'ai pu regler les 2 problemes.celui du xml et ma fonction ajax,
mais j'ai un autre souci
je vous explique ma fonction.js me permet l'affichage de plusieurs pages web dynamiques mais seulement les pages qui sont ds le meme dossier.
voici une partie du code
xhr.onreadystatechange = function() 

{

if (xhr.readyState 4 && (xhr.status 200 || xhr.status == 0)) 

{

   var docXML= xhr.responseXML;

           var it = docXML.getElementsByTagName("donnee")

           var nom=unescape(self.location.pathname).split('/');

           var pag=nom[nom.length-1];

           var sui=0;

   //on fait juste une boucle sur chaque element "donnee" trouvé

       for (i=0;i= it.length )

                          { sui=0; }

                              break;

                     }

            }

   setTimeout ( function() { location.replace( it[sui].firstChild.nodeValue); },1000 ); 



}

pour remedier a ce probléme j'ai fait ceci :
var nom=self.location.pathname;

           var sui=0;

   //on fait juste une boucle sur chaque element "donnee" trouvé

       for (i=0;i= it.length )

                          { sui=0; }

                              break;

                     }

            }

   setTimeout ( function() { location.replace( it[sui].firstChild.nodeValue); },1000 ); 


mais quand je test , j'ouvre n'importe qu'elle page oup une redirection automatique vers la premier page
svp si vous avez la moindre idée n'hesitez pas a m'aider
merci bien
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
euh....
>> if ( it[i].firstChild.nodeValue ==nom )
ce ne serait pas plutôt pag ?


var xhr=null;
function ajax()
{
if (window.XMLHttpRequest)
{ xhr = new XMLHttpRequest(); }
else { if (window.ActiveXObject)
{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
}
xhr.onreadystatechange = function()
{ if(xhr.readyState == 4)
{ var sui=0;
var nom=self.location.pathname.split("/");;
var pag=nom[nom.length-1];
it=xhr.responseXML.getElementsByTagName("donnee");
for (var i=0; i= it.length )
{ sui=0; }
break;
}
}
setTimeout ( function() { location.replace( it[sui].firstChild.nodeValue); },1000 );
}
}
xhr.open("GET", "reponse.xml", true);
xhr.send(null);
}
ajax();
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
crotte de biques, je sucras mes remarques ?

remarques :

_ c'est pour vous essayer à traiter du xml j'espère,
car mettre le nom des page dans un simple array
suffirait

_ j'utilise plutôt, pour du xml
IE :
new ActiveXObject('Microsoft.XMLDOM');
.onreadystatechange
xhr.load(fichier);
FF :
document.implementation.createDocument( '', '', null );
.onload
xhr.load(fichier);
pour les autres, effectivement, ce que vous faites :
new XMLHttpRequest();
.onreadystatechange
.open( 'GET', fichier, true );
.send( '' );

_ vous allez être obligé de mettre ce
script dans toutes les pages
j'aurais plutôt utiliser un index.html
qui afficherait page1.html...pagen.html
dans un iframe, mais bon, ce n'est que
mon avis et ça ne fait pas le moine
Messages postés
39
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Re
non bul ma fonction fonctionne sans aucun probléme avec des pages de ce genre par exemple:
http://localhost/page1.php
http://localhost/far.php
http://localhost/dari.html

mais le souci c 'est que si mes pages ne viennent pas du meme serveur par exemple si je voulais q'une page
http://www.9rayti.com/...
s'affiche avec les autres pages sachant que j'ai la source de cette page pour ajouter la linge :
<script type="text/javascript" src="function.js"></script>

c'est pour ca je me suis dit qu'il faut entrer l'url complet de la page dans la base de donnée et j'ai modifié da la fonction .js
var nom=self.location.pathname.split("/");
par
var nom=self.location.pathname;//l'url complet

et if ( it[i].firstChild.nodeValue ==pag )
par if ( it[i].firstChild.nodeValue ==nom )
mais ds ce cas ma fonction ne marche plus comme j'ai déja dit quand je teste j'observe une redirection automatique vers la premiere page que j'ai fait entrer de la table de ma base de donnée aussi que cette page continue a se recharger chaq 3000 seconde
alors ??
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
ce que j'ai mis en exemple, à
partir du votre, fonctionne.

si les pages sont sur un site différent,
"suffit" de l'ajouter
soit dans le replace :
location.replace( "http://site voulu/.../..."+it[sui].firstChild.nodeValue);
soit dans le xml
<donnee>http://site voulu/.../...page#.html</donnee>

ça dépend aussi de comment le script est appelé
soit avec un bouton soit avec setTimeout
sinon si c'est au onload une fois la page
chargée, elle appelle immédiatement la suivante

faites donc un essai en local, uniquement
avec un texte significatif pour les pages
et le script, chez moi : ça baigne
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
9
================== exemple 1 ===========

reponse.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<exemple>
<donnee>page1.html</donnee>
<donnee>page2.html</donnee>
<donnee>page3.html</donnee>
<donnee>page4.html</donnee>
</exemple>

page1.html

<script type="Text/JavaScript"
src="Fonction.js"></script>
page 1


page2.html

<script type="Text/JavaScript"
src="Fonction.js"></script>
page 2


page3.html

<script type="Text/JavaScript"
src="Fonction.js"></script>
page 3


page4.html

<script type="Text/JavaScript"
src="Fonction.js"></script>
page 4


Fonctions.js
var xhr=null;
if ( window.ActiveXObject )
{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
else { xhr = new XMLHttpRequest(); }
xhr.onreadystatechange = function()
{ if( xhr.readyState == 4 )
{ var nom=self.location.pathname.split("/");
var pag=nom[nom.length-1];
var it=xhr.responseXML.getElementsByTagName("donnee");
for ( var i=0; i

page2.html

page 2


page3.html

page 3


page4.html

page 4


index.html


<script>
var pagHTM =["page1.html","page2.html","page3.html","page4.html"];
var i=-1;
function affiche()
{ i++;
window.frames["ifr"].location.href=pagHTM[(i%pagHTM.length)];
setTimeout( affiche, 1000 );
}
affiche();
</script>


================== exemple 4 ===========
ou même comme ça, sans javascript !

page1.html

page 1
<meta http-equiv="Refresh" content="1; URL=page2.html" />


page2.html

page 2
<meta http-equiv="Refresh" content="1; URL=page3.html" />


page3.html

page 3
<meta http-equiv="Refresh" content="1; URL=page4.html" />


page4.html

page 4
<meta http-equiv="Refresh" content="1; URL=page1.html" />


================== il y a d'autres manières possibles, je pense,
mais c'est tout ce qui me vient sur le moment ===========