2016-06-11 4 views
1

3 일 동안 내 코드에서 JQuery 지연 메서드를 사용하는 방법을 찾으려고하지만 불행히도 솔루션을 찾지 못했습니다.JQuery 지연된 요청 각 루프에서 아약스

두 가지 기능이 있습니다. 첫 번째 init_items 첫 번째 아약스 요청을 보내 항목 목록을 가져온 다음 루프는 해당 항목 이름을 사용하여 다른 요청을 보내 항목에 대한 세부 정보를 얻습니다. 이 글에서는 첫 번째 요청이 완료되면 다음 요청을 시작하겠습니다.

클릭 할 때 호출되는 두 번째 함수에서 데이터를 가져 오기 전에 첫 번째 기능이 완전히 완료되었습니다 (모든 요청이 완료되었습니다).

function init_items(id) { 

     $.when(
      $.ajax({ 
       async: false, 
       data: { type : type, name : domain }, 
       type: 'GET', 
       url: 'select_items.php' 
      }).done(function (data) { 

      var promises=[]; 

      $.each(JSON.parse(data), function(k,v) { 

       var code = v.code; 

       getCurrentItem(code); 

       var req = $.get("get_groups.php", { id: id }).done(function(data1) { 

       res = JSON.parse(data1); 
       global_news[domain] = res; 

       promises.push(req); 
      }); 

      return $.when.apply(null, promises).done(function(){ 
       console.log('done 1'); 
      });    
     });  
    } 

    $("button[name='refresh_value']").on("click", function() { 

     var id = $("select[name='id']").val(); 

     $.when(init_items(id)).done(function(n){ 
      console.log(n.num); 
      console.log('all set'); 
     }); 
}); 

현재 버튼을 클릭에 init_items 출시를 작동하지만 정보를 표시 할 수있는 결과를 기다리지 않습니다.

나는이 사건을 크게 외면하고, 지연하고, 약속하고, 많이 읽었지만이 문제를 해결하지 못했다.

누구나 아이디어가 있습니까? 나는 정말로 당신의 도움에 감사 할 것입니다.

최저

,

+0

a) 연결을 위해'done' 대신'then'을 사용해야합니다. 가능한 한 어디서든 '완료'하지 마십시오. b) 괄호가 들여 쓰기와 일치하지 않습니다. 당신이 옳은 일을하려했지만, 작성한 코드는 그것을하지 않습니다. 내부의'done' 콜백이 어떻게/어디에서 끝나는지는 이해가되지 않습니다. – Bergi

+0

'domain'은 상수로 보이고 nomansland에서는'getCurrentItem (code)'이 떠 다니는군요. –

답변

0

고마워. 해결책을 찾았습니다. 두 함수에서 함수를 분리했습니다. 첫 번째 요청이 완료되면 약속으로 선언 된 요청을 실행하는 두 번째 요청을 호출합니다.

관련 문제