2014-01-13 3 views
0

DropDown select에서 다음 jquery를 실행합니다. each()를 사용하여 li을 반복합니다.

$.get()은 서버에서 데이터를 가져 오는 데 약간의 시간이 걸리므로 이미지를 전환하여 img로드를 사용하고 있습니다. 그러나 each 메서드는 get 데이터를 가져올 때까지 기다리지 않고 직접 끝으로 이동합니다.

get이 서버에서 데이터를 가져올 때까지 each을 보유하는 방법은 무엇입니까?

JQUERY JQuery와 위의 실행에

jd('#UserId').change(function (e) { 
      var selectedID = jd(this).val();     
      jd('.loading').css("display", "block"); 
      jd(".stats_box li").each(function (index, liElement) { 
       var li_id = liElement.id; 

       /* Request the partial view with .get request. */ 
       jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) {      

        jd('#CaseStatus').html(data); 

       }); 
      }); 
      alert("End"); 
      jd('.loading').css("display", "none"); 
     }); 

, 그것은 바로 나를 alert & 다음 데이터가 언젠가 후에 볼 수 있습니다 보여줍니다. meagar가 제안한 것처럼 모든 요청을

jd('#UserId').change(function (e) { 
    var selectedID = jd(this).val(); 
    jd('.loading').css("display", "block"); 
    var rqts = []; 
    jd(".stats_box li").each(function (index, liElement) { 
     var li_id = liElement.id; 
     rqts.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) { 
      //I've a doubt about the target element 
      jd('#CaseStatus').html(data); 
     })); 
    }); 
    //wait for all requests to complete 
    jd.when.apply(jd, rqts).always(function() { 
     jd('.loading').css("display", "none"); 
    }) 
}); 

을 완료까지

+0

아래 참조

을 완료 그것의 ** 비동기 **, 당신이 그것을」를 개최 "할 필요가 없습니다. – adeneo

답변

3

당신은

jd('#UserId').change(function (e) { 
    var selectedID = jd(this).val(); 
    jd('.loading').css("display", "block"); 
    var rqts = jd(".stats_box li").map(function (liElement, index) { 
     var li_id = liElement.id; 
     return jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) { 
      //I've a doubt about the target element 
      jd('#CaseStatus').html(data); 
     }); 
    }); 
    //wait for all requests to complete 
    jd.when.apply(jd, rqts).always(function() { 
     jd('.loading').css("display", "none"); 
    }) 
}); 
+0

답안에서 $로 jd를 대체하십시오. –

+0

'.each' 대신'.map'을 사용하는 것이 더 좋습니다. (return) .get ...})' – meagar

+0

@ meagar 예 ... 될 것입니다 –

1

사용 $.when에서) (.MAP 사용하는 것이 더 좋을 것이다, 기다릴 필요 루프에있는 아약스의 시간

그리고 모든 th 전자의 요청

var work_list=[]; 

jd('#UserId').change(function (e) { 
      var selectedID = jd(this).val();     
      jd('.loading').css("display", "block"); 
      jd(".stats_box li").each(function (index, liElement) { 
       var li_id = liElement.id; 
      /* Request the partial view with .get request. */ 
      work_list.push(jd.get('/Home/_CaseStatus?type=CaseStatus&user_id=' + selectedID, function (data) { 
       jd('#CaseStatus').html(data); 

      })); 

     //now it wait for all requests to complete then come in done()     
     jd.when.apply(jd, work_list).done(function() { 
       alert("end"); 
      }); 
     }); 

     jd('.loading').css("display", "none"); 
    }); 
+0

'.when' * 내부에서'.each' 루프를 사용하고 있는지 확실히 확인하십시오 ... – meagar

+0

@meagar 저는 많은 시간을 사용합니다. 그래서 우리가 좀 더 잘 알고 있다면 plz를 공유 할 수 있습니다 :) –

+0

보세요 곳은. '.each' 내부에 * 있으므로 * 매 반복마다'when'을하고 있습니다. * 모든 반복 작업 후에 한 번 발생합니다. – meagar