2012-04-10 13 views
0

私はjavascriptで2つのif文を持っています。最初のif文が実行された後にのみ実行される2番目のif文が必要です(最初のif文は時々実行されるので、2つのif文を互いに入れ替えることはできません。 )jQueryはif文の終了を待つ

どうすればよいですか?

ここでは、コードところでです:

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

こんにちは、返信ありがとうございます。 2つのif文は互いに独立しているため、相互に存在することはできません。その2番目のifステートメントは、最初のステートメントの後に実行する必要があります(最初のifステートメントは常にfalseですが、最初はチェックする必要があります)。 – user1083320

+0

また、complete ..を使用してトリガー適切なイベントが生成されます。 –

1

は、AJAX呼び出しにasync: falseを追加行うことができます。

+0

それは動作しませんでした! – user1083320

+0

これは非同期である必要があります。入力ミスをコピーしましたか? :) –

+1

aysnc AJAXコールは悪いニュースのクマです。 – iambriansreed

1

あなたは誤ったコールバックと非同期コードを持っています。

2回目の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(AJAX)要求は、それが応答だとaccoradance内のコードの別のブロックを実行する際に正確に推測することはできませんあなたが対応する時間のない指定された量を持っていないので。完了したコールバック(この場合はsuccess)でコードを実行する必要があります。

2番目のif文の実際のコードを成功に置き換えるのではなく、別の関数に配置することを検討する必要があります。

+0

ajaxは常に呼び出す必要はありません!ですから、私は、if文を別々に保つことで、ajaxへの余分な呼び出しを防ぐことができました。 – user1083320

関連する問題