递归方法调用出错

时间:2014-07-16 11:09:20

标签: javascript jquery ajax

我需要从外部API获取数据。由于我必须一次又一次地进行调用以检查状态,直到状态为TRUE,我将其置于递归循环中。我需要知道我的逻辑有什么问题,因为我无法获得所需的输出。 response.status是自我更新还是我需要制作另一个ajax,就像我在代码中所做的那样

   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 个答案:

答案 0 :(得分: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逻辑。