2017-08-29 10 views
0

ロードに約50秒かかるPHPページがあります。その間、私はBootstrap Progress Barを実行したがっていました。しかし、これはページが読み込まれた後にのみ実行されます。ここでページがロードされる前にブートストラップの進行状況バーを実行できません

は私のコードです:ここでは

<head> 
     <title>Harvest Expense Report</title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     <script src="dropdown.js"></script> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> 
     <script src="https://npmcdn.com/[email protected]/dist/js/tether.min.js"></script> 
     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> 
     <script> 
    $(document).ready(function(){ 
     var progressBar = $('.progress-bar'); 
     var percentVal = 0; 
     window.setInterval(function(){ 
      percentVal += 2; 
      progressBar.css("width", percentVal+ '%').attr("aria-valuenow", percentVal+ '%').text(percentVal+ '%'); 
      if (percentVal == 100) 
      { 
       var link = document.getElementById('nav-ask'); 
       link.style.display = 'none' 
      } 
     }, 500); }) 
     </script> 
</head> 

<body> 



<!--Progress Bar--> 
<div class="row"> 
     <div class="col-md-12"> 
      <div class="progress"id="nav-ask"> 
        <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"> 
         0% 
        </div> 
       </div> 
       </div> 
       </div> 


<div class="dropdown"> 
    <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 
    Choose a Month 
    </button> 
    <div class="dropdown-menu" select name="Dropdown_Month" id="month_dropdown" aria-labelledby="dropdownMenuButton"> 
    <option class="dropdown-item" href="#" value="This">This Month</option> 
    <option class="dropdown-item" href="#" value="Last">Last Month</option> 
    </div> 
    </select> 
</div> 
<br> 
<br> 
<br> 
<h3><?php echo date('M Y'); ?></h3> 
<table class="table table-bordered"> 
<thead> 
    <tr> 
    <th>Name</th> 
    <th>Expense</th> 
</tr> 
</thead> 

    <?php require_once('connection.php'); 
    $result= $api->getUsers(); 
    $users=$result->data; 



    $range= Harvest_Range::lastMonth(); 


    foreach($users as $key=>$value){ 

$user_id=$value->get("id"); 
$first_name=$value->get("first-name"); 
$last_name=$value->get('last-name'); 

    $result_expenses=$api->getUserExpenses($user_id, $range); 
$expenses_data=$result_expenses->data; 

$total_cost=0; 

foreach($expenses_data as $key=>$value){ 
if($value->get("is-locked")=="true"){ 
$total_cost=$total_cost+$value->get("total-cost"); 

}} 
?> 
<?php if($total_cost!=0){?> 
<tbody> 
<tr> 
<td> <?php echo $first_name; echo " ".$last_name; ?> </td> 
<td> $ <?php echo $total_cost; ?> </td> 
</tr> 
</tbody> 
<?php }}?> 

</table> 



</body> 

</html> 

は、PHPのページへlinkです。ページが読み込まれる前に進捗バーを実行するにはどうすればよいですか?現在、ページが完全にロードされた後にロードされます。ユーザーがブラウザにURLを入力するとすぐにこれを実行したいと思います。

+0

window.load関数でプログレスバーを実行しようとしましたか? – Akintunde007

+1

レポートを表示せずに進行状況バーにページを表示し、Ajaxを使用して別のPHPページからjavascriptを使用してレポートを取得する必要があります。 – Jarzon

+0

@freginold間違ってコードを消去したと思います。 – Jarzon

答えて

3

デフォルトでは、PHPはHTML /出力を完全に完了したらブラウザに送信するだけです。このため、ページのロードが完了するまでプログレスバーが表示されません。

  1. 出力バッファリングを使用して、PHPスクリプトが終了する前にページコンテンツを送信することができます。サーバーの設定によっては、このオプションが機能する場合もあれば、機能しない場合もあります。ここをクリックしてください:http://php.net/manual/en/book.outcontrol.php

  2. ページを動的に変更してページを更新してください。ページが読み込まれると、進行状況バーのみが表示されます。次に、あなたのデータを取得するために必要な作業を行う別のPHPスクリプトをAJAX呼び出しにします。完了したら、データを最初のページに戻すことができ、JavaScript/jQueryを使用して進行状況バーを非表示にしてページの内容を更新することができます。

これは、現在のところ受け入れられているWebアプリケーション標準であるため、オプション2を使用する方がよいでしょう。

関連する問題