jQuery目录树形式的请求的延迟对象

时间:2012-08-30 23:19:22

标签: jquery jquery-deferred

我想要遵循树状结构的AJAX请求,有点像文件系统目录,其中目录链接到其他目录。只有在我的情况下,我遵循REST API,我遵循ID。与每个请求一样,我收到子目录的ID列表(以及最后的“文件”)。

所以我想做的是使用forEach在AJAX调用中进行AJAX调用。我想检查是否发生了错误,我想确保它等待请求完成,以便最终我能够处理并返回我收到的数据。我该怎么做?

所以我基本上都有这样的JSON,从/目录开始。我想获取所有文件并将它们作为一个大JSON从函数返回。

/目录

["directoryA", "directoryB"]

/ direcotry / directoryA

["subDirectory1", "subDirectory2"]

/ direcotry / directoryB

["subDirectory4"]

/目录/ subDirectory1

["fileA", "fileB"]

/目录/ subDirectory2

["fileC"]

/文件/的fileA

{"some content"}

/文件/ FILEB

{"Hello world"}

/文件/ fileC

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

...

我的代码目前正在讨论这个问题(对不起,最初的代码是CoffeeScript,还有很多其他的东西可以帮助决定最终得到什么以及如何对它们进行排序):

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.
      });
    });
  });
}

1 个答案:

答案 0 :(得分:0)

您可以使用jQuery Deferreds或Promises发出大量请求,并使用jQuery's $.when在外部完成回调中收集数据。

为每个目录和文件进行一堆往返可能会很慢。对于获取目录和文件或让服务器获得更大的数据块(如ls -R)或将请求与ql.io之类的内容组合起来更加懒惰可能会更快。