jQuery / Javascript执行顺序


jQuery / Javascript execution order?

我正试图准确地找出这里发生的事情的执行顺序。我使用jquery检索新数据,偶尔会遇到不正常的情况。我如何拥有它当前的工作流程顺序应该是这样的:

  1. Onload - get()函数(检索两个div的数据)
  2. move()函数通过按钮激活
  3. move.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");
}

我发现div有时会在move.php mysql_query完成之前检索信息。怎样才能更好地控制执行顺序?我希望信息在它再次调用从数据库检索数据之前完成更新。

谢谢

我相信执行顺序完全符合您的期望,除了下面的代码片段:

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的调用完成后才发生,那么您可能会有更好的运气,例如:

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");移动到响应回调/处理程序,您可以确保它不会被执行,直到您的其他请求返回其响应。