如何对多个URL使用getjson()

时间:2017-05-03 21:08:40

标签: javascript json getjson jqxhr

我正在尝试检索一些JSON文件。不确定哪个URL可以正常工作,因此我正在寻找一种尝试所有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将访问相同的数据。

那么我怎么能做出这样一个方法,只要它失败就尝试新的url? 失败,我的意思是它可能不是现有文件(404)或相同的腹股沟政策错误。

提前感谢。

2 个答案:

答案 0 :(得分:2)

您可以将调用链接在一起,因此如果一个调用失败,则使用fail上的jquery $.getJSON方法转到下一个调用。像这样:

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

链接到文档:http://api.jquery.com/jquery.getjson/#jqxhr-object

答案 1 :(得分:1)

使用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 );
});

这将允许您等到所有请求都完成后,并允许您访问他们的所有回复。