2014-07-14 2 views
0

maxnumId이 비어 있거나 정의되지 않을 때까지 반복적으로 ajax 메서드를 호출하려고합니다. 현재 코드가 한 번만 발생합니다! 아무도 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?특정 조건이 참이 될 때까지 ajax를 재귀 적으로 호출하는 방법은 무엇입니까?

<script> 
    var maxnumId = null; 

    function callApi4() { 
     $.ajax({ 
      type: "GET", 
      dataType: "jsonp", 
      cache: false, 
      url: "https://api.somesite.com/ddddd" + (maxnumId ? "&max_id=" + maxnumId : ""), 
      success: function(data) { 
       maxnumId = data.pagination.next_max_id; 
       alert('maxnumId is now: ' + maxnumId); 
       document.myform.outputtext.value = document.myform.outputtext.value+data.pagination.next_max_id+'\n' ; 

      for (var i = 0; i < 100; i++) { 

      $(".content").append("<img class='image' src='" + data.data[i].images.low.url +"' />"); 
      } 

       if(maxnumId != "undefined"){ 
       setTimeout(callApi4(), 2000); 
       } 
       else 
       { 
       alert('finished'); 
       } 
      } 
     }); 
    } 
    </script> 

<button onclick="callApi4()">call ajax first time</button> 
+0

실제로 "정의되지 않은"문자열이나 if에서 maxnumId의 실제 정의되지 않은 값을 찾고 있습니까? 정의되지 않은 값을 찾고 있다면 따옴표를 삭제해야합니다. 이것이 문제가되지 않는다면 서버에서 어떤 결과를 얻고 있습니까? –

+0

위의 내 의견은 원래의 문제를 해결하는 데 도움이되지 않을 수도 있지만 ... 논리를 살펴보면 무한 콜백을 기대할 수 있습니다. 실제로 어떤 결과물을 얻고 있습니까? –

+0

답장을 보내 주셔서 감사합니다. 함수를 처음 실행하면 첫 번째 API 호출에서 가져온 데이터가 하나씩 나타납니다. 그렇다면 서버에서 데이터를 다시 얻지 못합니다! 나는 버튼을 통해 함수를 호출 한 후 api가 호출 될 때까지 기다렸다가 maxnumId에 대한 빈 데이터를 얻을 때까지 기다렸습니다! 재귀 호출을하는 if 및 else 문을 내부에 배치 한 후에도 경고는 결코 팝업되지 않습니다! 그래서 내 재귀 호출이 작동하지 않는 것 같아! – user1788736

답변

2

대신 setTimeout(callApi4(), 2000); 쓰기 setTimeout(callApi4, 2000);의 callApi4 방법에서 괄호를 제거 : 감사

이 코드입니다.

+0

나는 그것을 시도했다. 심지어 setTimeout (callApi4, 2000); outside if 문 여전히 아약스는 호출되지 않으며 응답이 없습니다! – user1788736

+0

루프 외부에 놓습니다. 코드가 어딘가에서 깨지기 때문에 호출되지 않습니다. 속성에 액세스하려고하는 null 속성이 있어야합니다. – EduardoFernandes

+0

나는 여기에 'maxnumId = data.pagination.next_max_id;'또는 여기'document.myform.outputtext.value = document.myform.outputtext.value + data.pagination.next_max_id + '\ n'; 왜냐하면 단순히 null 일 수있는 객체가 너무 많기 때문입니다. console.log 또는 경고를 사용하여 확인하십시오. – EduardoFernandes

관련 문제