У меня есть друг, который хочет постепенно перемещать данные из одной базы данных в другую и при этом отображать ошибки. Я чувствовал, что могу помочь, написав быстрый сценарий для него, и я завершил его примерно через час, и он отлично работает в Opera и Firefox (тестирование с помощью dragonfly и firebug). Когда он попробовал это сделать в 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.
Знать, почему это происходит, было бы неплохо знать для будущих проектов, но я также хотел бы написать это правильно. Цель состоит в том, чтобы взять 200 тыс. Вставок / обновлений и разбить их на более мелкие куски, выполнить запросы синхронно и обновить индикатор выполнения в процессе.