2015-06-29 3 views
0

У меня проблема с баром нагрузки. У меня есть файл с именем site.php, load.js и file.php моя система читает файл excel и извлекает данные в массиве, я хочу отобразить прогресс, но файл чтения строки excel, а не загрузка файла excel.Загрузочная панель с PHP, HTML и Bootstrap

мой site.php

<!DOCTYPE html> 
<html lang="en"> 
<head> 
     <meta charset="UTF-8"> 
     <title>Document</title> 
     <link href="css/bootstrap/css/bootstrap.min.css" rel="stylesheet"> 
     <script type="text/javascript" src="js/jquery.js"> 
     </script> 
    </head> 
    <body> 
    <div class="progress" style="width:90%; margin:20px auto;"> 
     <div id="barra_progreso" class="progress-bar progress-bar-danger progress-bar-striped active" role="progressbar" aria-valuenow="1" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> 
     <span class="sr-only"></span> 
     </div> 
    </div> 
    </body> 
    </html> 

load.js

var datos = new FormData(); 
    datos.append('excel', file); 
    $.ajax({ 
     url: 'file.php', 
     type: 'POST', 
     data: datos, 
     processData: false, 
     contentType: false 
    }).done(function(r) { 
     $("#msgOK").html(r); 
} 

file.php

$cant = $excel->getRow() + 1; 
    sleep(1); 
    echo "<script type='text/javascript'> 
    $(function() { 
var progressbar = $('#barra_progreso'), 
    **max = 25**, 
    value = 0; 
var loading = function() { 
    value += 1; 
    addValue = progressbar.val(value); 
    if (value <= (1/3 * max)) { 
     progressbar.addClass('progress-bar-danger') 
    } else if (value <= (2/3 * max)) { 
     progressbar.removeClass(' progress-bar-danger '); 
     progressbar.addClass('progress-bar-warning') 
    } else { 
     progressbar.removeClass('progress-bar-warning'); 
     progressbar.addClass('progress-bar-success') 
    } 
    var porc = (value/max) * 100; 
    var valor = parseFloat(Math.round(porc * 100)/100).toFixed(2); 
    progressbar.css({ 
     width: porc + '%' 
    }); 
    progressbar.html(valor + '%'); 
    if (value == max) { 
     clearInterval(animate); 
     alert('carga completada'); 
    } 
}; 
var animate = setInterval(function() { 
    loading(); 
}, 1000); 

});

</script>"; 

     flush(); 

     ob_flush(); 

Каждая функция работала хорошо, но бар нагрузки отображается после чтения файла Excel, я знаю, что поведение связано с ajax.done, я печатаю максимальный ROWNUM моего файла первенствовать и с этим значением I работать в нагрузочной панели. Любой способ исправить эту проблему?

ответ

0

Что вам нужно сделать, это запустить два процесса одновременно.

Загрузка файла и извлечение данных, а другая - проверка статуса этого действия. Итак, вы, наверное, сделали первый.

Чтобы сделать второй, вам нужно будет записать статус загрузки, в сеанс, вероятно, проще всего, если он не будет конфликтовать ни с чем другим. Затем с помощью AJAX вы устанавливаете таймер для непрерывного вызова PHP-скрипта, который получает статус из сеанса и возвращает его, это должен быть очень короткий скрипт.

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

Смежные вопросы