2009-08-12 8 views
2

utilisation d'une requête POST ajax jQuery, je reçois le code XML suivant à partir du serveur:Comment analyser une réponse ajax xml avec jQuery?

<?xml version="1.0"?> 
<data> 

    <subject> 
    <val1>...</val1> 
    <val2>...</val2> 
    <val3>...</val3> 
    </subject> 

    <subject> 
    <val1>...</val1> 
    <val2>...</val2> 
    <val3>...</val3> 
    </subject> 

    ... 

</data> 

Le xml aura un nombre arbitraire de <subject> balises. Comment faire une boucle dans chacune des balises sujet, en saisissant les données dans val1..val3 pour la balise correspondante dans chaque itération? Merci.

Répondre

2

Assurez-vous que votre réponse du serveur envoie un en-tête "Content-Type" de "text/xml". Ensuite, la réponse sera le document XML analysé. Votre gestionnaire de succès a pour ensuite itérer les DOM résultant:

$.post(url, postData, function(xmlDoc) { 
    $('subject', xmlDoc).each(function() { 
     var val1 = $('val1', this).text(); 
     var val2 = $('val2', this).text(); 
     var val3 = $('val3', this).text(); 
    }) 
}); 
+0

J'ai essayé ceci et cela a fonctionné pour le val # qui est arrivé à avoir des données de varchar de la base de données. Mais la balise val qui contenait des données de type texte (mySql) était vide lorsque j'essayais de faire apparaître $ ('val #', this) .text(); Des idées pour lesquelles cela serait? – oym

+0

@ es111: Je devrais voir le xml. Publier une mise à jour –

+0

ne me dérange pas, j'étais stupide, pour l'un des tags # valais j'utilisais en fait qui je suppose est pourquoi il n'a pas ramassé la valeur .. simplement la changer à un autre nom a travaillé .. merci – oym

1

Utilisation des méthodes DOM:

var subjects = xml.getElementsByTagName("subject"); 
for(i in subjects){ 
    alert(subjects[i].getElementByTagName("val1").textContent; 
    alert(subjects[i].getElementByTagName("val2").textContent; 
    alert(subjects[i].getElementByTagName("val3").textContent; 
} 
0

Je ne trouve pas la syntaxe en ce moment, mais vous pouvez interroger l'objet en utilisant les sélecteurs comme vous le faites html, quelque chose comme:

$.get('your/url', function(response) { 
    $(response).contents("subject"); // just like it's HTML 
}); 
Questions connexes