2017-05-03 8 views
0

일부 JSON 파일을 검색하려고합니다. 어떤 URL이 작동하는지 확실하지 않으므로 모든 URL을 시도하는 방법을 찾고 있으며 실패하면 다른 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에 의해 액세스됩니다.

그렇다면 어떻게 실패 할 때마다 새 URL을 시도하는 방법을 만들 수 있습니까? 실패로 인해 기존 파일 (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); 
}); 

이 모든 요청을 완료 할 때까지 기다려 당신이에 대한 액세스를 제공 할 수 있습니다 모든 응답.