2017-05-03 8 views
0

Ich versuche, einige JSON-Dateien abzurufen. Es ist nicht sicher, welche URL funktionieren wird, daher suche ich nach einer Möglichkeit, alle URLs zu testen und wenn eine fehlschlägt, versuche sie eine andere.Wie benutze getjson() für mehrere URLs

URLs wie:

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

Auch die Struktur jeder JSON-Datei nicht das gleiche ist, so abhängig von der Datei habe ich eine andere Art und Weise, um es für den Zugriff auf . Sagen wir für die Datei a.json Ich werde auf Daten von json.users [3] .name zugreifen, aber in der Datei b.json werden die gleichen Daten von json.sources.users[3].name zugegriffen.

Also wie kann ich eine solche Methode, die die neue URL versuchen, wenn es versagt, machen? Durch das Scheitern, meine ich, dass es keine existierende Datei (404) oder der gleiche Leistenrichtlinienfehler ist.

Vielen Dank im Voraus.

Antwort

2

Sie könnten die Anrufe miteinander verketten. Wenn ein Anruf fehlschlägt, wird mit der Methode jquery fail unter $.getJSON fortgefahren. Etwas wie folgt aus:

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

Link zu docs: http://api.jquery.com/jquery.getjson/#jqxhr-object

1

Ilses jQuery Promise.all Implementierung: $.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); 
}); 

Dies ermöglicht es Ihnen, zu warten, bis alle Anforderungen abgeschlossen haben und geben Ihnen Zugriff auf alle ihre Antworten.