【发布时间】:2012-01-20 01:38:51
【问题描述】:
我有一个朋友想要将数据从一个数据库增量移动到另一个数据库,并在执行此操作时显示错误。我觉得我可以通过为他编写一个快速脚本来提供帮助,我在大约一个小时内完成了它,并且在 Opera 和 Firefox 中运行良好(使用蜻蜓和萤火虫进行测试)。当他在 Chrome 中尝试时,浏览器会一直锁定,直到 for 或 while 循环完成,并且需要相当长的时间才能完成。这是我的代码(没有读取 json 的错误捕获部分):
jQuery.noConflict();
jQuery('#myForm').submit(function(form) {
form.preventDefault();
var increment = (jQuery("input#increment").val())*1;
var total = jQuery("input#total").val();
var progress = 0;
jQuery("#progressbar").progressbar({value: 0});
//for (progress = 0; progress < total; progress = progress + increment)
while (progress < total)
{
jQuery.ajax({
url: 'progressBarAjax.php',
type: "POST",
async: false,
dataType: "json",
data: {
ajax: 'goAjax',
total: total,
increment: increment,
progress: progress
},
success: function(data){
jQuery("#progressbar").progressbar({value: data.value});
}
});
progress = progress + increment;
}
});
另外,为了进一步参考,在调试和 data.value = floor(($progress / $total) * 100) 期间,捕获错误的代码已被剥离。您还可以查看我在哪里尝试过,并且在 Opera 和 Firefox 中都可以正常工作,但在 Chrome 中却不行。
知道为什么会发生这种行为对于未来的项目来说会很高兴,但我也想正确地编写它。目标是进行 20 万次插入/更新并将它们分解成更小的块,同步运行查询,并在此过程中更新进度条。
【问题讨论】:
-
Chrome 上的进度条是否以适当的时间间隔更新?
-
如果我将 alert() 放在进度条的中间,进度条会更新,但浏览器在 while 循环完成之前没有响应。增量是表单中传递的任何内容。因此,如果您可以总计 500 并增加 100,您应该会看到进度条更新 5 次 @20%。适用于 FF 和 Opera,而不是 Chrome。
-
所以您要求浏览器尽可能快地执行“总”获取?您可能只需要错开或计时,以免浏览器不堪重负。
-
(已删除评论 - 错过了
async: false。) -
为了测试,我在函数中有 sleep(1) 替换任何实际工作并尝试只执行总共两个循环,所以第一次运行会将进度条更新为 50,然后是 100%,它仍然在 FF 和 Opera 中运行良好,但不是 Chrome。
标签: php javascript jquery ajax google-chrome