如何使用的getJSON()多个URL
问题描述:
我想找回一些JSON文件。不确定哪个URL可以工作,因此我正在寻找一种尝试所有URL的方法,如果失败,它会尝试另一个。如何使用的getJSON()多个URL
网址等:
www.domain.com/a.json
www.domain.com/b.json
www.domain.com/c.json
var url = "www.domain.com";
var file1 = "/a.json";
var file2 = "/b.json";
var file3 = "/c.json";
$.getJSON(url + file1, function(json) {
console.log("JSON Data: " + json.users[ 3 ].name);
});
同样,每个JSON文件的结构是不一样的,所以根据文件我必须有一个不同的方式来访问它。假设对于文件a.json
我将通过json.users [3] .name访问数据,但在文件b.json
中,相同的数据将由json.sources.users[3].name
访问。
那么,我该如何做一个这样的方法,尝试新的网址,只要它失败了? 失败,我的意思是它可能不是现有的文件(404)或相同的腹股沟政策错误。
提前致谢。
答
你可以将呼叫链接在一起,所以如果一个呼叫失败,它将使用$.getJSON
上的jquery fail
方法进行下一步操作。事情是这样的:
$.getJSON(url + file1, function(json) {
//do something with file1
}).fail(function() {
$.getJSON(url + file2, function(json) {
//do something with file2
}).fail(function() {
$.getJSON(url + file3, function(json) {
//do something with file3
})
});
});
答
使用jQuery的Promise.all
实现:$.when
:
var url = "www.domain.com";
var urls = ["/a.json", "/b.json", "/c.json"];
var requests = urls.map(function(path) {
return $.getJSON(url + path);
});
$.when.apply($, requests).then(function(a_resp, b_resp, c_resp) {
console.log("JSON Data: ", a_resp, b_resp, c_resp);
});
这将让你等待,直到所有请求已完成,并给你访问所有他们的回应。