2011-07-18 103 views
0

我试图准确找出这里发生的事情的执行顺序。我正在使用jquery来检索新的数据,并且偶尔会出现违规行为。我如何有其目前的工作流程顺序应该是这样的:jQuery/Javascript执行顺序?

  1. 的Onload - 让()函数(检索两个div的数据)
  2. 此举()函数通过一个按钮
  3. 举动激活.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会检索信息。如何更好地控制执行顺序?我希望信息在它调用从数据库中再次检索数据之前完成更新。

感谢

+1

为了将来的参考,请正确格式化您的代码以提高可读性:) – vinceh

+0

您的意思是您希望重复按钮点击不要在移动功能完成之前调用移动功能吗? –

+0

@Peter:我的意思是说,一旦移动按钮被点击,它应该:A.用调整后的值更新sql,B.从数据库中检索信息(可以推测刚刚更改的新数据,我发现它将检索数据,但它没有函数move()应该调用php页面来评估它应该如何改变,然后更新数据库,然后get(“main”)将会检索新的数据到div,这是否更有意义? – Blake

回答

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");到重新回调/回调函数,你可以确保它不会被执行,直到你的其他请求返回响应。

+0

我明白你的意思了,@aroth。非常好的解释。非常感谢。 – Blake