Codeigniter视图显示进度

时间:2016-08-04 14:06:18

标签: php codeigniter progress-bar progress

我正在使用Codeigniter并希望显示XML导入的进度。 但我面临的问题是 当查看加载时,它停留在加载(空白页面),当我看到它的显示100%完成时。

我的代码如下:

return $this->belongsTo('App\Whatever', 'foreign_key', 'other_key');

此代码在视图中,但是当我点击链接加载此视图时,我必须等待所有进程完成,然后我可以看到所有进程完成时的视图。

我想要的是:

  1. 显示视图(空)。

  2. 然后继续打印每一行作为循环去。

  3. 由于

1 个答案:

答案 0 :(得分:3)

这里有一个使用AJAX的进度条示例:

<强>的index.php

Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

<强> checker.php

<?php
// Start the session.
session_start();
?>
<!DOCTYPE html>
<html>
<head>
  <title>Progress Bar</title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  <style>
    #progress {
      width: 500px;
      border: 1px solid #aaa;
      height: 20px;
    }
    #progress .bar {
      background-color: #ccc;
      height: 20px;
    }
  </style>
</head>
<body>
  <div id="progress"></div>
  <div id="message"></div>
  <script>
    var timer;

    // The function to refresh the progress bar.
    function refreshProgress() {
      // We use Ajax again to check the progress by calling the checker script.
      // Also pass the session id to read the file because the file which storing the progress is placed in a file per session.
      // If the call was success, display the progress bar.
      $.ajax({
        url: "checker.php?file=<?php echo session_id() ?>",
        success:function(data){
          $("#progress").html('<div class="bar" style="width:' + data.percent + '%"></div>');
          $("#message").html(data.message);
          // If the process is completed, we should stop the checking process.
          if (data.percent == 100) {
            window.clearInterval(timer);
            timer = window.setInterval(completed, 1000);
          }
        }
      });
    }

    function completed() {
      $("#message").html("Completed");
      window.clearInterval(timer);
    }

    // When the document is ready
    $(document).ready(function(){
      // Trigger the process in web server.
      $.ajax({url: "process.php"});
      // Refresh the progress bar every 1 second.
      timer = window.setInterval(refreshProgress, 1000);
    });
  </script>
</body>
</html>

<强> process.php

<?php

// The file has JSON type.
header('Content-Type: application/json');

// Prepare the file name from the query string.
// Don't use session_start here. Otherwise this file will be only executed after the process.php execution is done.
$file = str_replace(".", "", $_GET['file']);
$file = "tmp/" . $file . ".txt";

// Make sure the file is exist.
if (file_exists($file)) {
    // Get the content and echo it.
    $text = file_get_contents($file);
    echo $text;

    // Convert to JSON to read the status.
    $obj = json_decode($text);
    // If the process is finished, delete the file.
    if ($obj->percent == 100) {
        unlink($file);
    }
} else {
    echo json_encode(array("percent" => null, "message" => null));
}

只需在CI上编写它并创建一个tmp文件夹,然后在脚本中指向它的路径。祝你好运!