2017-05-03 27 views
0

我想找回一些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)或相同的腹股溝政策錯誤。

提前致謝。

回答

2

你可以將呼叫鏈接在一起,所以如果一個呼叫失敗,它將使用$.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 
     }) 
    }); 
}); 

鏈接到文檔:http://api.jquery.com/jquery.getjson/#jqxhr-object

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

這將讓你等待,直到所有請求已完成,並給你訪問所有他們的迴應。