2014-07-16 2 views
1

외부 API에서 데이터를 가져와야합니다. 상태가 TRUE가 될 때까지 상태를 확인하기 위해 다시 호출해야하기 때문에 재귀 루프에 배치했습니다. 원하는 출력을 얻을 수 없기 때문에 내 논리가 잘못되었는지 알아야합니다. response.status 자체를 업데이트하거나합니까 난 내가 코드재귀 메서드 호출시 오류가 발생했습니다.

fetchFunct(); 
     function fetchFunct(){ 


     console.log("entered function"); 

      $.ajax 
      ({ 
       type: "GET", 
       url: "/content/mosaic/multi/preview/status/"+testId , 
       async: false, 
       dataType : "json", 
       success : function(response) 
       { 
       console.log(response); 
       if(response.status === false) 
       { 
        console.log("Processing details"); //show still in progress 
        $("#load").show(); 
        $("#heading").hide(); 
        $("#b1").hide(); 
        $("#b2").hide(); 
        $("#b3").hide(); 
        $("#b4").hide(); 
        $("#b5").hide(); 
       }else 
        { 
        $("#load").hide(); 

        console.log("Loading 1"); 
        $("#b1").click(function(){ 
        $("#ad22img").attr("src","http://" + response.images.android22);}) 
        console.log("Loading 2"); 
        $("#b2").click(function(){$("#ad4img").attr("src","http://" + response.images.android4);}) 
        console.log("Loading 3"); 
        $("#b3").click(function(){ $("#apm6img").attr("src","http://" + response.images.appmail6);}) 
        console.log("Loading 4"); 
        $("#b4").click(function(){ $("#blbimg").attr("src","http://" + response.images.blackberryhtml);}) 
        console.log("Loading 5"); 
        $("#b5").click(function(){$("#iphnimg").attr("src","http://" + response.images.iphone5s);}) 
        is_loaded = true; 

        } 

       } 
      }).fail(function(data) { console.log("FAIL"); }).done(function(data) { console.log("coming out of ajax"); 
      }); 



if(!is_loaded) 
{ 

console.log("entered if"); 

delay=delay*2; 
if(delay>60) 
{delay=1;} 

setTimeout(fetchFunct,delay*1000); 
} 
//console.log("if not entered"); 
} 
+1

코드를 들여 쓰기로 시작할 수 있습니까? 읽을 시간이 너무 많습니다. – putvande

답변

1

에서 수행 한 방법과 같은 다른 아약스 당신은 콜백 함수 내에서 다시 함수를 호출해야 할 필요가 않습니다.

if(response.status === false) 
{ 
    console.log("Processing details"); //show still in progress 
    $("#load").show(); 
    $("#heading").hide(); 
    $("#b1").hide(); 
    $("#b2").hide(); 
    $("#b3").hide(); 
    $("#b4").hide(); 
    $("#b5").hide(); 

    //Try again 
    setTimeout(function(){ 
     fetchFunct(); 
    },1000); 

}else 

하여 AJAX 호출 아래 setTimeout 논리의 필요 없음.

+0

그래도이 일을 더 잘 이해하지만 그 다음엔 너무 까다 롭지 만? – user3840570

+0

@ user3840570 논리가 콜백 함수 외부에 있기 때문에 아니요. 'is_loaded'는 논리가 실행 된 후에 설정됩니다. – Curt

+0

is_loaded는 로직이 실행 된 후 설정되고, 체크하고 재실행하지 않으므로 소리가 잘 들린다. 어쨌든 1 톤 감사합니다! – user3840570

관련 문제