Return avec un objet XML

Résolu
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
Bonsoir à tous,
c'est du javascript, mais comment se fait-il que je ne puisse pas faire ceci ? :

if (_xmlHttp.readyState==4&&_xmlHttp.responseXML) {
        return _xmlHttp.responseXML;
}

alors que tout va bien du côté XML, j'ai testé.

si vous pouviez m'indiquer la bonne syntaxe, parce que je galère un peu là !
merci d'avance !

11 réponses

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut à tous,

je me demande si ce n'est pas tout simplement la syntaxe
truc = function(){ return machin; }
qui ne fonctionne pas.

Du coup je suis passé par une autre astuce qui est de mettre le xml dans une variable globale, puis de manipuler cette variable.
Je ne trouve pas ça très propre mais je n'ai pas trouvé mieux.
Merci à tous de vous être penché sur mon pb, si vous avez une autre idée n'hésitez pas.
Merci !
à+
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Tu peux le faire! :)

Moi j'ai la meme ligne et ca joue... Quel est le pb exactemetn?

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
26
Hello,

oui, à mon avis, c'est côté réception que ça doit merder. Parce que je ne vois pas pourquoi ton code, là,  foirerait.
Il se passe quoi au juste ?
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Salut!
Un truc intéressant est l'affichage de
xmlHttp.status ; ca te donne bien 200?

Sinon, tu peux nous mettre un bout de code + grand!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Bonjour!

le status est bien à 200.

Mon xml est de type

    valeur
    ...

Ce qui marche bien :

tout dans ma fonction load_xml ( ) :
................
if(_xmlHttp.readyState= =4&&_xmlHttp.responseXML) {
    //alert ( _xmlHttp.responseXML) me renvoie XmlObject
    var infos = _xmlHttp.responseXML.getElementsByTagName("info");

    for (var i= 0; i < infos.length; i++){  document.getElementById(infos[i].getAttribute("name")).innerHTML=infos[i].firstChild.data;
    }
}
.............

ce qui ne marche pas :

dans ma fonction load_xml ( )
if(_xmlHttp.readyState==4&&_xmlHttp.responseXML) {
              return _xmlHttp.responseXML;
}

et plus loin :
function load_texte( ){
    var xmlDoc = load_xml("./load_texte.php?num=1");
    //alert ( _xmlHttp.responseXML) me renvoie undefined
    var infos = xmlDoc.getElementsByTagName("info");

    for (var i=0; i < infos.length; i++){ 
document.getElementById(infos[i].getAttribute("name")).innerHTML=infos[i].firstChild.data;

    }

}

ça me parait bizarre aussi, si vous voulez plus de code...
Merci !
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
ha et je précise que si je mets un alert juste avant le return (fonction load_xml) et un autre dans la fonction load_texte après l'appel, j'obtiens les deux messages : xml object, puis undefined. C'est donc bien le return qui ne passe pas apparemment...
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
zut j'ai fait une faute de frappe : dans mon code dans la fonction load_texte j'ai bien écrit











alert (



xmlDoc)










et pas





alert (



_xmlHttp.responseXML)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Et si tu déclares ton objet _xmlHttp en dehors de la fonction??

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
C'est déjà comme ça que je procède.

Si vous avez une fonction toute bête qui renvoie le xml dans un return, je suis preneur

Je mets tout le code :
       
        var _xmlHttp = null; //l\'objet xmlHttpRequest utilisé pour contacter le serveur

        function load_xml(adresse){
            if(_xmlHttp&&_xmlHttp.readyState!=0){
                _xmlHttp.abort()
            }
            _xmlHttp=getXMLHTTP();
            if(_xmlHttp){
                //appel à l\'url distante
                _xmlHttp.open("GET", adresse,true);
                _xmlHttp.onreadystatechange = function() {
                    if(_xmlHttp.readyState==4&&_xmlHttp.responseXML) {
                   
                        //alert(_xmlHttp.responseXML); //renvoie XML object
                        return _xmlHttp.responseXML;
                    }
                }
                // envoi de la requête
                _xmlHttp.send(null)
            }
        }

        function load_texte(){
            var xmlDoc = load_xml("./load_texte.php?num=1");
            alert(xmlDoc); //renvoie undefined

            var infos = xmlDoc.getElementsByTagName("info");

            for (var i=0; i < infos.length; i++){
                document.getElementById(infos[i].getAttribute("name")).innerHTML = infos[i].firstChild.data;
            }
        }
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Ta structure me semble bizarre:
si xml n'envoie pas de retour (pas encore) ta fonction load_xml ne renvoie rien... Ca peut poser pb au niveau du xmlDoc, non?

Je verrais plutot la partie
var infos = xmlDoc.getElementsByTagName("info");

            for (var i=0; i < infos.length; i++){
                document.getElementById(infos[i].getAttribute("name")).innerHTML = infos[i].firstChild.data;
            }

Direct dans le on change, genre:
if(_xmlHttp){
                //appel à l\'url distante
                _xmlHttp.open("GET", adresse,true);
                _xmlHttp.onreadystatechange = function() {
                        if(_xmlHttp.readyState == 4 && _xmlHttp.responseXML)
                        {
                             var infos = _xmlHttp.responseXML.getElementsByTagName("info");

                            for (var i=0; i < infos.length; i++)
                                document.getElementById(infos[i].getAttribute("name")).innerHTML = infos[i].firstChild.data;
                        }
                }
                // envoi de la requête
                _xmlHttp.send(null)
        }

Qu'en penses-tu?

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Hello,
oui ça marche mais ce n'est pas ce que je veux, car je veux simplement une fonction générique qui me renvoie du xml à partir d'une page, car le xml après sera traité de plusieurs manières différentes selon les cas. Load_texte( ) n'est qu'une fonction parmi d'autres, et je trouverais moche de réécrire toute la partie ajax à chaque fois.

Sinon je ne vois pas bien ce que tu voulais dire par

 si xml n'envoie pas de retour (pas encore) ta fonction load_xml ne renvoie rien... Ca peut poser pb au niveau du xmlDoc, non?

le (pas encore), tu veux dire quoi ?