2009-10-17 8 views
2

J'essaye de créer un site de portfolio où mes pièces résident dans un fichier XML. Je voudrais stocker le DOM XML dans une variable JavaScript afin que je puisse y accéder sans faire un appel au serveur chaque fois qu'un utilisateur clique pour charger un nouveau morceau.jQuery cache XML

En ce moment, j'ai:

$(document).ready(function() { 
    xml = getXML(); 
}); 

function getXML() { 
    var data = $.ajax({ 
     url: '_lib/xml/portfolio.xml', 
     dataType: 'xml', 
     success: function(data) { return data; } 
    }); 
    return data; 
} 

Tout en utilisant Firebug, si I "console.log (données)" dans la fonction anonyme après "succès:", il enregistre un "document". Si je "console.log (xml)" dans le "$ (document) .ready ...", il enregistre un XMLHTTPRequest et je ne peux pas accéder au DOM du document XML.

J'ai essayé de retourner "data.responseXML" mais cela ne fait rien. J'ai également essayé d'appeler une fonction non-anonyme après "succès:" et d'enregistrer le XML là-bas, et il apparaît toujours comme "Document" qui est ce dont j'ai besoin.

Il semble que le problème se produit lorsque je retourne le XML - il passe de "Document" à "XMLHTTPRequest".

Toute aide serait grandement appréciée. Merci!

Répondre

2

Essayez ceci:

function getXML() { 
    var XML = null; 
    $.ajax({ 
     url:  '_lib/xml/portfolio.xml', 
     dataType: 'xml', 
     async: false, 
     success: function(data) { 
      XML = data; 
     } 
    }); 
    return XML; 
} 

Je ne sais pas ce que retourne « $.ajax » mais j'ai essayé semblable à la vôtre et ne marchera jamais. Donc le code ci-dessus est ce que je m'installe avec.

EDIT Je veux juste souligner que vous devez avoir 'async: false' dans la requête ajax.

Espérons que cela aide.

+0

Génial, NawaMan - merci beaucoup! Peut-être que "$ .ajax" renvoie l'ensemble de l'objet XML et "success:" renvoie juste le responseXML? Savez-vous pourquoi async doit être faux? – salmonete

+0

Je n'ai vraiment aucune idée des retours: p. 'async' doit être' false' pour que la fonction 'getXML()' attende la réussite de l'exécution d'ajax en premier. (XML est affecté en premier). :RÉ – NawaMan