У меня есть индикатор выполнения jQuery ui
var item = 4;
$('<div/>', { id: 'progressBar' + item, 'class': 'ui-widget-default flpb' }).appendTo($('#test'));
$('#progressBar' + item).progressbar({ value: 0 });
здесь индикатор выполнения отображается на странице
, затем я выполняю ajax-вызов, подобный этому
$.getJSON("http://" + jsonServiceUrl + "/data/for/" + item + "/from/" + $('#dtStart').val() + "/to/" + $('#dtEnd').val() + "?callback=?",
function (results) {
var pbScale = 100 / results.count,
startTime = new Date().getTime();
$.each(result, function (r, result) {
//here the progress bar doesn't update.
$('<div/>', { html: " Date: " + new Date(parseInt(result.TimeOfMeasurement.substr(6))) }).appendTo('#test');
$('#progressBar' + item).progressbar('value', r * pbScale);
});
console.debug('elapsed milisecs: ' + new Date().getTime() - startTime;
});
ProgressBar получает обновления «100%» после завершения функции обратного вызова.
РЕДАКТИРОВАТЬ:
Я не пытаюсь получить прогресс моего вызова JSON, я 'Я пытаюсь добиться прогресса в цикле сбора вещей, которые я получаю с сервера.Помимо обновления индикатора выполнения я также рисую элемент div для каждого элемента коллекции.В коллекции содержится до 200 элементов, поэтому для их отображения достаточно прогресса.
Рядом с индикатором выполнения, который не обновляется, вновь созданные элементы div также не отображаются, пока не завершится функция обратного вызова.
Я добавил таймер, и время обработки составляет около 1000 миллисекунд (этого должно быть достаточно для обновления индикатора выполнения пары элементов).