Каков наилучший способ показать прогресс по вызову Ajax? - PullRequest
34 голосов
/ 10 октября 2010

У меня есть вызов Ajax, который обновляет 5000 записей в базе данных, так что это занимает много времени. У меня есть Ajax «Загрузка изображения», показывающий, что что-то происходит, но я ищу лучший способ показать «Обновление 50 из 5000 ...», «Обновление 200 из 5000» или что-то в этом роде.

Каков наилучший способ сделать что-то подобное в Ajax / jQuery без 5000 различных сообщений?

Ответы [ 12 ]

0 голосов
/ 15 декабря 2010

Что-то кажется подозрительным.

Я не знаком с базами данных, которые не могут обновить 5000 записей во флэш-памяти ... Так что это не единственное обновление, которое вы применяете, а обновление записи по записи?

Рассмотрим систему, которая позволяет пользователю загружать 5000 записей и не отмечает, какие из них были отредактированы, а затем в конце выполнения обновлений применялась одна кнопка обновления, которая требовала бы, чтобы все 5000 записей были каким-либо образом возвращены обратно.Это будет наихудший случай.

Так что может быть какой-то способ разбить проблему так, чтобы не было времени ожидания.Рассмотрим, например, временную таблицу БД (или просто в памяти приложений, довольно просто, просто создав список объектов ORM ... но это в стороне), а затем, когда приходит время для фиксации этих обновлений, их можно по крайней мере сделать вПакет без необходимости передачи клиент / сервер.Может быть даже возможно пометить отдельные поля, которые были отредактированы, так что в БД больше ничего не обновляется, кроме того, что именно изменилось.

Существуют долго выполняющиеся процессы, и я знаю, что иногда вы застряли в необходимостикто-то предоставил вам ... но, возможно, немного подумав, вы можете просто избавиться от времени ожидания.

0 голосов
/ 14 декабря 2010

Для отображения прогресса во время загрузки я бы изменил свой бэкэнд так, чтобы он мог выполнять выборочную загрузку.

Например,

var total_rec = 5000;
var load_steps = 20;
var per_load = total_rev / load_steps;
var loaded = 0; 
while (loaded < total_rec) {
    www.foobar.com/api.php?start=loaded&end=(loaded+per_load);
    loaded += per_load;
}

Каждый раз, когда загрузка завершена, обновляйте индикатор выполнения.

Альтернативный способ изменить бэкэнд может быть

www.foobar.com/api.php?start=loaded&count=50
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...