2014-07-16 86 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

做另一個AJAX你應該再次撥打您的功能的回調函數內。

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是在邏輯運行之後設置的,然後它會檢查並不重新運行該函數,以便聽起來好嗎?無論如何感謝一噸! – user3840570