2012-06-01 3 views
0

Imaginez que vous avez un fichier data.xml:données XML dans une seule variable en utilisant JQuery

<?xml version="1.0" encoding="UTF-8" ?> 
<root> 
    <item>value1</item> 
    <item>value2</item> 
    <item>value3</item> 
</root> 

Je suis en train de stocker toutes les config de données en une seule variable afin de l'utiliser dans mes .js code en utilisant ceci:

$(document).ready(function() { 
     'use strict'; 
     jQuery.extend({ 
      getValues: function(url) { 
      var result = null; 
      $.ajax({ 
       url: url, 
       type: 'get', 
       dataType: 'xml', 
       async: false, 
       success: function(data) { 
       result = data; 
       } 
      }); 
       return result; 
      } 
     }); 

     results = $.getValues("data.xml"); 
     console.log(results); 
}); 

Si j'actualisez la page que je reçois dans des résultats variables d'un objet de document avec des champs comme URL, baseURI, corps ...

Si j'actualisez je reçois dans les résultats d'un #document objet avec le dat a du fichier data.xml:

<root> 
    <item>value1</item> 
    <item>value2</item> 
    <item>value3</item> 
</root> 

Ainsi, le type d'objet renvoyé change à chaque fois que quelqu'un se rend à l'URL.

J'ai deux questions à ce sujet:

  1. Comment puis-je faire la valeur retournée toujours #document? (qui contient les données du fichier .xml)

  2. Comment puis-je accéder à un élément à partir de #document?

J'ai essayé d'utiliser:

console.log(results.root.item); 
console.log(results.find("item")); 

Mais les deux me donnent des erreurs.

Peut-être y a-t-il un meilleur moyen de le faire (c'est-à-dire de lire les données xml dans une seule variable).

Des suggestions?

Répondre

1

Vous retournez le résultat avant que la demande de paiement ajax est terminé. Vous devez attendre la ajax revenir, puis appeler une fonction de rappel:

$(document).ready(function() { 
     'use strict'; 
     jQuery.extend({ 
      getValues: function(url, callback) { 
      var result = null; 
      $.ajax({ 
       url: url, 
       type: 'get', 
       dataType: 'xml', 
       async: false, 
       success: function(data) { 
        callback.call(this, data); 
       } 
      }); 
      } 
     }); 

     $.getValues("data.xml",function(data){ 
      console.log(data); 
     }); 

}); 
+0

Vous avez raison, mais pour que cela fonctionne, j'ai dû supprimer la propriété "async". Maintenant, j'ai juste besoin de savoir comment accéder à un élément de la variable de données. – rfc1484

+0

@ rfc1484 oh j'ai manqué l'option asynchrone. puisque vos données sont en XML, vous pouvez utiliser jquery pour accéder aux éléments: 'var xml = $ (data);' par exemple 'xml.find ('someelement'). attr ('someattribute');' – Andy

0

vous pouvez sélectionner des balises xml ainsi:

success: function(data) { 
    parser(data); 
} 

function parser(data) { 
... 
} 
+0

Mais je veux choisir les balises XML en dehors de la fonction ajax succès, une fois que le xml a été retourné. – rfc1484

+0

@ rfc1484 vous pouvez créer une fonction et lui transmettre les données ajax. – undefined

Questions connexes