是否可以通过AJAX加载更多文件?
例
$.ajax({
url: ["test1.html", "test2.html", "test3.html"],
success: function(data1, data2, data3) {
// Do something
}
});
因为我想避免回调...
$.ajax({
url: "test1.html",
success: function(data) {
$.ajax({
url: "test2.html",
success: function(data) {
$.ajax({
url: "test3.html",
success: function(data) {
// Do something
}
});
}
});
}
});
最佳答案
我更喜欢编写递归函数,并为此类使用堆栈。这只会在处理结束时运行success
或error
一次,并将依次获取每个url。但是,顺序获取它们可能会使加载时间更长,因为它不允许浏览器并行处理请求!与此不同的是,并行运行所有请求并按顺序处理结果。
function fetch (urls, success, error) {
if (urls.length) {
$.ajax({
url: urls[0],
success: function () {
fetch(urls.slice(1), success, error)
},
error: error
})
} else {
success()
}
}
fetch(["url1.html", "url2.html", ...], function () {
// success
}, function () {
// failure
})
在我刚键入时,可能会有一些小错误,但是这个概念很合理。还有更多的事情可以做,例如传递值/结果,但这些都是作为练习;-)在应用相同警告的情况下,这是一个仅按顺序处理结果的版本-请求可以并行发送:
function fetch (urls, success, error) {
var fetched = 0
var results = []
var wasError = false
function _fetch (i) {
if (i < urls.length) {
$.ajax({
url: urls[i],
success: function (result) {
// report success when all the results are in
results[i] = result
if (++fetched == urls.length) {
success(results)
}
},
error: function () {
if (!wasError) {
wasError = true
error()
}
}
})
// re-prime right away
_fetch(i + 1)
}
}
_fetch(0)
}
var urls = ["url1.html", "url2.html", ...]
fetch(urls, function (results) {
$.each(results, ...)
}, function () {
// error :(
})
快乐的编码。
关于javascript - 通过AJAX加载更多文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4045340/