我对不同服务器有不同的网址,但有相同的文件,为了确保上述服务器之一处于事件状态,我想尝试从第一个服务器下载,如果失败,请尝试第二个服务器,依此类推。 ..
是否有更好的方法来代替我心中的方法?就是这样:
var urls=["http://Url1.com","http://Url2.com","http://Url3.com"]
$.get(ulrs[0]).done(function () {
alert("success");
}).fail(function () {
alert(" First failed!, try with second");
$.get(ulrs[1]).done(function () {
alert("success");
}).fail(function () {
alert("Second failed! Try with third...");
$.get(ulrs[2]).done(function () {
alert("success");
}).fail(function () {
alert("All failed!");
});
});
});
编辑:我想概括它,以便与不同大小的不同数组一起使用......
最佳答案
使用递归:
function requestNext(arr, success, error) {
if (!arr.length)
return error();
function onError() {
alert(url + " failed!");
requestNext(arr, success, error);
}
var url = arr.shift();
$.get(url).done(success).fail(onError);
}
var urls = ["http://Url1.com","http://Url2.com","http://Url3.com"];
requestNext(urls, function(){ alert("success"); }, function(){ alert("all failed") });
此函数完成后,urls
数组将发生变化。如果您不希望发生这种情况,请传递一份副本:
requestNext(urls.slice(), function(){ alert("success"); }, function(){ alert("all failed") });
或者使用 Dogbert 的解决方案,将 var url = arr.shift();
更改为:
var url = arr[0];
arr = arr.slice(1);
关于javascript - 如果其他 URL 不可用,则从其他 URL 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37908995/