我有到位被拆分大型查询到管理的小块,然后用一个简单的AJAX方法吐出了这一点的工具。 AJAX表单的目的地只是一个将某些表单数据委托给函数的脚本,包括处理哪个“块”。未能延时功能,直到后for循环已全面完成
<script>
var passes = Math.ceil($max/$offset);
for (i = 0; i < passes; i++)
{
$.ajax({
type: 'POST', url: 'do.php?p=' + i, data: $('#form" . $i . "').serialize(),
success: function(data){
$('#update" . $i . "').append(data);
}
});
}
</script>
,因为这可以重复几次,我一直在寻找为执行循环何时脚本(即本身的功能)已完成。
由于这不是什么太时髦,我认为这将是添加if(i == passes -1) { alert('test');}if(i == passes -1) { alert('test');}
到循环的结束,像这样的一个简单的例子:
for (i = 0; i < passes; i++) {
$.ajax({
type: 'POST', url: 'do.php?p=' + i, data: $('#form" . $i . "').serialize(),
success: function(data){
$('#update" . $i . "').append(data);
}
});
if(i == passes -1) { alert('test');}
}
....但它加载这个作为在页面加载之前,在循环之前。
同样,在之后添加一个简单功能循环也获得了相同的结果。
我本来以为(但我在JS挺新鲜的),它会试图执行的“i”的第二个实例之前完成一个循环,但它似乎并没有这样做 - 页面的行为像所有请求都会立即发送,完成循环,执行代码,然后允许“成功”内的函数在自己的时间内回显。这似乎更加明显,因为它有时会在第一次之前追加第二次迭代i
的结果。
问题...
1)因为我已在我如何构成的循环,考虑到目的的错误?
2)为什么循环似乎在循环之后执行代码时,它看起来像它仍然会在处理循环本身?
我试图实现
每个循环应该执行MySQL查询,回放功能的HTML输出,然后移动到下一个前打印出来。它确实做到了99%正确,只是偶尔出现的问题并不总是按顺序排列。
毕竟循环已经完成,并追加到容器中,我想运行一些代码来确认操作完成。
许多在此先感谢,希望这是不够清楚
看看:[为什么我的变量在函数内部修改后没有改变? - 异步代码引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Andreas
使用承诺。或者对于简单的ajax,使用Callback。 –
您可以对函数使用递归调用,将其添加到$ .ajax的成功参数中。这会按照您希望的顺序加载所有内容。 –