2012-04-10 4 views
0

javascript에 두 개의 if 문이 있습니다. 첫 번째 if 문이 실행 된 후에 만 ​​실행되는 두 번째 if 문이 필요합니다 (두 문을 서로 안에 넣을 수는 없습니다. 첫 번째 문은 때때로 실행되므로 다른 문은 두 번째 문이 실행되기 전에 확인되어야합니다.)jQuery가 if 문을 완료 할 때까지 기다림

어떻게해야합니까?

여기에 코드 BTW입니다 :

if($('#suggestion-'+change).html() == null) 
    {  
     $.ajax({ 
      type: 'post', 
      dataType: 'html', 
      url: '/suggestion/ajax-change/', 
      data: {type: change}, 
      success: function(result,status) 
      { 
       $('#profile_suggestion .content_wrapper').prepend(result); 
      } 
     }); 
    } 

    if(active != change) 
    { 
     var panelShow = '#suggestion-' + change; 
     var panelHide = '#suggestion-' + active; 
     var dirShow = ''; var dirHide = ''; 

     switch(active) 
     { 
      case 'compatibility': 
       dirHide = 'left'; 
       switch(change) 
       { 
        case 'mutual': 
         dirShow = 'right'; 
         break; 
       } 
      case 'mutual': 
       switch(change) 
       { 
        case 'compatibility': 
         dirHide = 'right'; 
         dirShow = 'left'; 
       } 
     } 
     $(panelHide).hide("slide", { direction: dirHide }, 1000); 
     $(panelShow).show("slide", { direction: dirShow }, 1000).removeClass('fader'); 
     $(panelHide).addClass('fader'); 
     active = change; 
    } 

답변

0

흠, 당신은 함수로 두 번째를하고 성공을 호출 할 수 있습니다? 나는

.. 제가 질문을 잘못 이해하는 경우 죄송 또는이

$("something").bind('update', function() { do something you want to do }); 

    $.ajax({ 
     type: 'post', 
     dataType: 'html', 
     url: '/suggestion/ajax-change/', 
     data: {type: change}, 
     success: function(result,status) 
     { 
      $('#profile_suggestion .content_wrapper').prepend(result); 
     }, 
     complete: function() 
     { 
      $("something").trigger('update'); 
     } 
    }); 
+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 두 개의 if 문은 서로 독립적이므로 서로 내에있을 수 없습니다. 그 두 번째 if 문이 첫 번째 문 다음에 실행되어야합니다. (가끔씩 첫 번째 if 문이 false 일 때가 있지만 먼저 확인해야합니다!) – user1083320

+0

complete ...를 사용하고 trigger()를 사용하여 적절한 이벤트가 생성되도록하십시오. –

1

는 Ajax 호출에 async: false를 추가 할 수 있습니다.

+0

그게 작동하지 않았다! – user1083320

+0

비동기 적이어야합니다. 오타를 복사 했습니까? :) –

+1

aysnc AJAX는 나쁜 곰입니다. – iambriansreed

1

당신은 콜백과 비동기 코드에 대한 오해가 있습니다.

두 번째 if 문을 성공 콜백에 배치해야합니다.

$.ajax({ 
    type: 'post', 
    dataType: 'html', 
    url: '/suggestion/ajax-change/', 
    data: { 
     type: change 
    }, 
    success: function(result, status) { 
     $('#profile_suggestion .content_wrapper').prepend(result); 
     if (active != change) { 
      var panelShow = '#suggestion-' + change; 
      var panelHide = '#suggestion-' + active; 
      var dirShow = ''; 
      var dirHide = ''; 
      ..... 
     } 
    } 
});​ 

xhr (아약스) 요청은 응답의에 accoradance 코드의 다른 블록을 실행할 때 정확하게 추측 할 수 있습니다 응답 시간의 어떤 지정된 시간이 없기 때문에. 완료 콜백에서 코드를 실행해야합니다 (이 경우 success).

두 번째 if 문에 대한 실제 코드를 성공에 배치하는 대신 다른 함수에 배치하는 것을 고려해야합니다.

+0

아약스는 항상 호출 할 필요가 없습니다! 따라서 두 개의 if 문을 별도로 유지하여 ajax에 대한 추가 호출을 방지했습니다. – user1083320

관련 문제