2012-08-30 2 views
2

Je souhaite que les requêtes AJAX suivent une structure arborescente, un peu comme un répertoire de système de fichiers où les répertoires sont liés à d'autres répertoires. Seulement dans mon cas, je suis une API REST où je suis les IDs. Comme avec chaque demande, je reçois une liste d'identifiants des sous-répertoires (et "fichiers" à la fin).jQuery Objets différés pour une requête dans l'arborescence

Donc, ce que je veux faire est de faire des appels AJAX dans les appels AJAX en utilisant forEach. Je veux vérifier si une erreur s'est produite et je veux m'assurer qu'il attend que les demandes se terminent afin que je puisse à la fin traiter et renvoyer les données que j'ai reçues. Comment ferais-je cela?

J'ai donc essentiellement JSON comme ça et commence à partir de/répertoires. Je veux obtenir tous les fichiers et les retourner d'une fonction comme un grand JSON.

/répertoires

["directoryA", "directoryB"] 

/direcotry/directoryA

["subDirectory1", "subDirectory2"] 

/direcotry/directoryB

["subDirectory4"] 

/répertoire/subDirectory1

["fileA", "fileB"] 

/répertoire/subDirectory2

["fileC"] 

/fichier/fileA

{"some content"} 

/fichier/fileB

{"Hello world"} 

/fichier/Filec

{"nickname": "Clown", "id": 9247234} 

...

Mon code actuellement à ce sujet (désolé, l'original est CoffeeScript et fait beaucoup d'autres choses aider à décider quoi faire et comment les trier à la fin):

function getFiles(settings){ 
    $.ajax("/directories", settings, function(directories) { 
    data.forEach(function (directory) { 
     $ajax("/directory/" + directory, settings, function(subdirectory) { 
     // and so on, in the innermost processing the file contents, 
     // but unable to return them. 
     }); 
    }); 
    }); 
} 
+0

Je pense que vous devrez peut-être clarifier un peu plus votre question, la rendre très spécifique et dans votre exemple de code que vous utilisez actuellement. – shenku

+0

Y a-t-il toujours un seul niveau de sous-répertoires ou un arbre de système de fichiers complet? –

Répondre

0

Vous pouvez utiliser jQuery Différé ou promet de faire un tas de demandes et de collecter les données dans un rappel externe fait en utilisant jQuery's $.when. Faire un tas de tours pour chaque répertoire et fichier peut être lent. Être plus paresseux sur l'obtention de répertoires et de fichiers ou avoir le serveur obtiennent de plus gros morceaux de données (comme ls -R) ou en combinant les demandes avec quelque chose comme ql.io pourrait être plus rapide.

Questions connexes