2009-06-28 1 views
2

Мы используем вызов ajax для отправки данных на сервер. Программирование на стороне сервера выполняется с помощью Perl для сохранения данных в базе данных.Как я могу создать веб-панель прогресса в Ajax и Perl?

Поскольку у нас есть огромные размеры, мы хотим отобразить индикатор выполнения, который сообщает пользователю процентные данные, отправленные на сервер. Как это можно достичь с помощью Ajax и Perl?

Спасибо заранее.

ответ

3

На высоком уровне я, скорее всего, сделаю это, поместив пустой элемент display: block с цветным фоном (или, возможно, изображение) на странице с шириной нуля, а затем запустим периодические обратные вызовы AJAX на сервер, чтобы добиться прогресса обновляет и соответственно увеличивает ширину элемента. (Я подозреваю, что COMET будет более эффективным способом справиться с такими вещами, поскольку описания, которые я прочитал, предполагают, что его версия AJAX с поддержкой сервера, поэтому она устранит накладные расходы, но на самом деле посмотрел на COMET, поэтому я, возможно, не понимаю его.)

На низком уровне фактический код для реализации этого зависит в значительной степени от того, как вы делаете свой AJAX. Используете ли вы JQuery, CGI::Ajax, другой модуль (CPAN или иначе) или собственный ручной код AJAX?

2

Использование Comet: нажмите периодические теги JavaScript, которые обновляют прогресс бар элемент на странице , Вам также нужно будет отправить лишние пробелы, чтобы браузеры обновили страницу (найдите эквивалент флеша PHP() в Perl).

Например, каждый 10% загруженных данных, нажмите

<script type="text/javascript">progressBar(10)</script> 
<script type="text/javascript">progressBar(20)</script> 
... 
<script type="text/javascript">progressBar(100)</script> 

где progressBar(percentage) это функция, которая обновляет Progressbar ширину (я предполагаю, что у вас есть JQuery на странице):

function progressBar(percentage) { 
    $('#progressbardiv').css('width', percentage + 'px'); 
} 
+1

Чтобы принудительно отправить буферизованный вывод, просто напечатайте новую строку (\ n). Чтобы отключить буферизацию строк, существует несколько вариантов: http://www.rocketaware.com/perl/perlfaq5/How_do_I_flush_unbuffer_a_fileha.htm –