2016-10-18 4 views
-1

for -loops와 외부 URL에 대한 Ajax 호출을 중첩했습니다. 나는 약속을 사용하고 싶지만, 어디에 넣어야할지 모른다. $.getJSON 요청이 모두 완료되어 problemHost을 출력해야합니다.jQuery - 모든 Ajax 요청이 완료되면 무언가 수행

if (problemHost.length > 0) { 
    console.log(problemHost); 
} 

내가의 약속을 배치해야합니까 장소 :

for (var i = 0; i < hosts.length; i++) { 
    var obj = hosts[i]; 

    for (var key in obj) { 
    var attrName = key; 
    var attrValue = obj[key]; 
    host = obj[key]; 
    console.log(host); 

    $.getJSON('http://myURL/get/', { 
     uid: host + "." + domain, 
     last: 1 
    }, function(data) { 
     json = data; 
     for (var i = 0; i < json.length; i++) { 
      var obj = json[i]; 
      for (var key in obj) { 
       var attrName = key; 
       var attrValue = obj[key]; 
       if (key.includes("JFSFILE_")) { 
        var newkey = key.replace("JFSFILE_", ""); 
        console.log(newkey + " " + obj[key]); 
        if (parseFloat(obj[key]) > 20) { 
         if (typeof problemHost[host] == 'undefined') { 
          problemHost[host] = {}; 
         } 
         problemHost[host][newkey] = obj[key]; 

        } 
       } 
      } 
     } 
    }); 

} 
} 

이 모든 아약스 호출이 완료 때까지 실행되지해야합니까? 이 문제를 해결하는 가장 좋은 방법입니까?

+0

downvoting하기 전에 - 왜 저에게 교육을 해주시겠습니까? – CMS

+1

아니 downvoter, 위의 덧글을 삭제 더 나은 당신은 더 많은 downvotes 당신이 얻을 것이다 – Satpal

+3

여기에 약속을 사용하여 훌륭한 응답이있다 http://stackoverflow.com/a/21807497/4848251 –

답변

0

당신은 그냥 이미 만들어진 얼마나 많은 요청을 셀 수 당신은 당신이 총 할 필요가 얼마나 많이 알고 있기 때문에,이 같은 것을 수행 할 수 있습니다

var reqs_done = 0; 
for(var i = 0; i < hosts.length; i++) 
{ 
    // ... 
    $.getJSON(...).done(function() 
    { 
     reqs_done++; 
     if(reqs_done == hosts.length) 
     { 
      // Code when all requests are done ... 
     } 
    } 
} 

참고도 확인해야 생산적인 환경에서 .fail.

+1

완벽 - 간단한 솔루션, 고마워! – CMS

관련 문제