2012-01-27 9 views
2

の最初の終了するまで、私は次のコードを持っている...防ぐ第二の実行jqueryの

$("#myID").click(function(){ 

    //do some ajax requisition here 
    //make it appears in screen with a fadeIn(300) 

}); 

#myIDが1個のタグ

のIDですが、私は、この関数がするまで再び呼び出されていないことを必要とします実際の実行が終了すると、私はコメントの後にeの前に多くの異なるコードを入れてみましたが、成功しなかった場合は、その2番目の実行を防ぐために助けることができます!効果が発生している間

フェードイン()の実行を持っていない、それが実行された後のコードは、誰かが私を助けることができますか?

ありがとう

+0

要素のどのような種類のMyIDているのですか?また、コメントに要約するのではなく、すべてのコードを含めることができますか? – JohnFx

+0

evandrobm

答えて

1

これは以前のajaxを強制終了させる可能性があります。実行するとbooleanを作成できます。クリックするとtrueに設定され、if(!running){// do ajax}がコールされます。あなたはAJAX機能が実行されているかどうかの状態を保存するフラグを設定することができます偽

+0

Works、ありがとう、ソリューションは非常にシンプルでしたが、私はそれで数時間ですし、問題を解決していない、非常にありがとう! – evandrobm

0

同期AJAXコールを使用します(デフォルトは非同期です)。それを行う方法の詳細については、this questionを参照してください。

+0

私は$ .getJSON(url、、function(data){...})を使用しています。 Ajaxの要求のために...ここで – evandrobm

+0

を同期getJSONを使用する方法を記述したブログ記事です:http://www.nurelm.com/themanual/2010/08/09/self-indulgent-code-jquery-getjson-with-error -handling/ – JohnFx

+3

同期AJAX呼び出しをしないことをお勧めします。完了するまでブラウザーをロックします。 –

4

に実行して設定します。

$(function() { 

    //set flag to allow AJAX calls 
    var AJAX_ok = true; 

    //bind click event handler 
    $("#myID").click(function(){ 

     //check if it is ok to run an AJAX request right now 
     if (AJAX_ok === true) { 

      //if we can run an AJAX request then set the AJAX_ok flag to false so another one does not start 
      AJAX_ok = false; 

      //make the AJAX call 
      $.getJSON('<url>', function (data) { 

       //now that the callback function has been called, the AJAX call is done, so we re-enable the AJAX_ok flag 
       AJAX_ok = true; 

       //make it appears in screen with a fadeIn(300) 
       //if DATA is valid HTML then... 
       $(data).css('display', 'none').appendTo('#some-container').fadeIn(300); 
      }); 
     } 
    }); 
}); 

これだけ#myID要素のclickイベントハンドラから1つのAJAX呼び出しを実行します一度に。

0

実行順序を保証するために100のより良い方法が...

$("#myID").click(function() { 
    var is_running = $(this).data('running'); 

    if (!is_running) 
     $(this).data('running', true); 
    else 
     return; 

    /* Do stuff */ 

    $(this).data('running', false); 
} 
0

使用コールバックは、おそらくあります。

$("#myID").click(function(){  
    $.ajax({ 
     url: 'whatever url you are calling', 
     success: function(){ 
      alert('ajax done'); 
      $('whatever "it" is').fadeIn(300, function(){ 
       //code place here will not execute until after fade in 
       alert('fadeIn done'); 
      } 
     } 
    }) 
}); 
関連する問題