我正在努力弄清楚这里发生的事情的执行顺序。我正在使用jquery来检索新数据,偶尔会出现违规行为。我如何拥有当前的工作流程顺序应该是这样的:
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完成之前检索信息。如何更好地控制执行顺序?我希望信息在调用再次从数据库中检索数据之前完成更新。
由于
答案 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");
移动到响应回调/处理程序,您可以确保在其他请求返回其响应之后才会执行它。