2011-07-18 28 views
0

私はここで起こっていることの実行順序を正確に把握しようとしています。私は新しいデータを取得するためにjqueryを使用しています。私は時々不規則になります。私はこのようなものである必要があり、現在の業務フローの順持つ方法:jQuery/Javascriptの実行順序?

  1. ロード時 - (取得)機能
  2. 移動()関数は、ボタン
  3. 移動を介して起動される(両方のdivのためのデータを取得) .phpにはmysql_queryの更新アクションがあります
  4. 更新されたデータベース情報でdivを再ロードします。

function get(varpass) { 
    varpass = typeof(varpass) != 'undefined' ? varpass : "all"; 
    var j = "<?=$_SESSION['username']?>"; 
    if (varpass == "all" || varpass == "left") { 
     $('#left').hide(); 
     $.get('data.php', { 
      name: j, 
      p: varpass 
     }, function (output) { 
      $('#left').html(output).fadeIn(250); 
     }); 
    } 
    if (varpass == "all" || varpass == "main") { 
     $('#main').hide(); 
     $.get('main.php', { 
      name: j, 
      p: varpass 
     }, function (output) { 
      $('#main').html(output).fadeIn(250); 
     }); 
    } 
} 
$(document).ready(function() { 
    get("all"); 
}); 
function move(p) { 
    var j = "<?=$_SESSION['username']?>"; 
    $.get('move.php', { 
     name: j, 
     p: p 
    }, function (output) { 
     $('#debug').html(output).fadeIn(1); 
    }); 
    $('#main').hide(); 
    get("main"); 
} 

私はmove.phpのするmysql_queryが完了する前に、機会にdiv要素が情報を取得することがわかります。実行の順序をより良く制御するにはどうすればよいですか?私は情報がデータベースから再度データを取得するために呼び出される前に、更新が完了するようにします。

function move(p) { 
    var j = "<?=$_SESSION['username']?>"; 
    $.get('move.php', { 
     name: j, 
     p: p 
    }, function (output) { 
     $('#debug').html(output).fadeIn(1); 
    }); 
    $('#main').hide(); 
    get("main"); //this can/will happen before `move.php` completes 
} 

あなたはget("main");move.php完了までお電話後まで起こらないようにしたい場合:私は実行順序は、次のコードでを除いて、あなたが期待どおりに働いていると考えてい

おかげ

+1

可読性のためにコードを正しくフォーマットしてください:) – vinceh

+0

リピートボタンのクリックが完了するまで移動機能を呼び出さないようにしたいのですか? –

+0

@Peter:移動ボタンをクリックすると、次のようになります。A. SQLを調整値で更新します。B.データベースから情報を取得します(変更されたばかりの新しいデータが推測されます。関数のmove()関数は、変更する必要があるかどうかを評価し、データベースを更新し、次に( "main")を得るPHPページを呼び出す必要があります新しいデータをdivに取り込みます。それはより意味がありますか? – Blake

答えて

0

function move(p) { 
    var j = "<?=$_SESSION['username']?>"; 
    $.get('move.php', { 
     name: j, 
     p: p 
    }, function (output) { 
     $('#debug').html(output).fadeIn(1); 
     get("main"); //this won't happen until after `move.php` completes 
    }); 
    $('#main').hide(); 
} 

get("main");を次のように再配置してください。 sponseコールバック/ハンドラを使用すると、他のリクエストが応答を返すまで実行されないことを保証できます。

+0

あなたは何を意味するのかを知っています、@aroth。 – Blake