我正试图准确地找出这里发生的事情的执行顺序。我使用jquery检索新数据,偶尔会遇到不正常的情况。我如何拥有它当前的工作流程顺序应该是这样的:
- Onload - get()函数(检索两个div的数据)
- move()函数通过按钮激活
- move.php有mysql_query更新动作
- 用更新的数据库信息重新加载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");
移动到响应回调/处理程序,您可以确保它不会被执行,直到您的其他请求返回其响应。