我想做 AJAX 请求来遵循树状结构,有点像文件系统目录,其中目录链接到其他目录。仅在我的情况下,我遵循 REST API,其中我遵循 ID。与每个请求一样,我收到子目录(以及最后的"file")的 ID 列表。
所以我想做的是使用 forEach 在 AJAX 调用内部进行 AJAX 调用。我想检查是否发生了错误,并且想确保它等待请求完成,以便最终我能够处理并返回收到的数据。我该怎么做?
所以我基本上有这样的 JSON 并从/directories 开始。我想获取所有文件并将它们作为一个大 JSON 从函数返回。
/目录
["directoryA", "directoryB"]
/目录/目录A
["subDirectory1", "subDirectory2"]
/目录/目录B
["subDirectory4"]
/目录/子目录1
["fileA", "fileB"]
/目录/子目录2
["fileC"]
/文件/文件A
{"some content"}
/文件/文件B
{"Hello world"}
/文件/文件C
{"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.
});
});
});
}
最佳答案
您可以使用 jQuery Deferreds 或 Promises 发出一堆请求,并使用 jQuery's $.when
在外部完成回调中收集数据。 .
为每个目录和文件进行大量往返可能会很慢。懒于获取目录和文件或让服务器获取更大的数据 block (如 ls -R )或将请求与 ql.io 之类的内容组合起来。可能会更快。
关于目录树形式的请求的 jQuery 延迟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12206955/