jQuery / Javascript执行顺序?

时间:2011-07-18 01:02:18

标签: php javascript jquery

我正在努力弄清楚这里发生的事情的执行顺序。我正在使用jquery来检索新数据,偶尔会出现违规行为。我如何拥有当前的工作流程顺序应该是这样的:

  1. Onload - get()函数(检索两个div的数据)
  2. 通过按钮
  3. 激活move()功能
  4. move.php具有mysql_query更新操作
  5. 使用更新的数据库信息重新加载div。

  6. 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完成之前检索信息。如何更好地控制执行顺序?我希望信息在调用再次从数据库中检索数据之前完成更新。

    由于

1 个答案:

答案 0 :(得分:0)

我认为执行顺序完全符合您的预期,但以下代码段除外:

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