【问题标题】:Use Dajax to stream log messages使用 Dajax 流式传输日志消息
【发布时间】:2015-07-09 17:43:51
【问题描述】:

我正在尝试为我的网站创建一个记录器窗口,将 python 记录器消息流式传输到 javascript 弹出窗口。我已经到了如果我关闭窗口并重新打开它会显示新消息的地步,但我想编写一些 JavaScript 每隔 N 秒自动刷新一次窗口(并调用 dajaxice)。

我的 ajax.py

@dajaxice_register(method='GET')
def getLogs(request):
  fname = "/path/to/LOG_2015-07-08.log"
  with open(fname,"r") as f:
    lines = f.readlines()
  lines = lines[-15:]  //
  logger.info("Displaying Logs")
  return json.dumps({'message':lines})

我的html

<script language="javascript" type="text/javascript">
  function popitup(data) {
    sessionStorage.setItem("logs",data.message);
    newWindow = window.open('/InterfaceApp/LogViewer', 'Log Viewer', 'height=400,width=800,status=yes');
    if(newWindow && !newWindow.closed){

    newWindow.location.reload(true);  //this is my first attempt at a refresh, wasn't quite what I wanted.

    newWindow.focus();
    } 
  }
</script>
<div class="container">
  <input id="LogMessages" type="button" value="View Log Messages" onclick="Dajaxice.InterfaceApp.getLogs(popitup)"/>
</div>

重申一下,我想单击按钮并弹出一个窗口。我希望该弹出窗口每隔 N 秒刷新一次,其中包含我的日志文件的最后 15 行(每次用户浏览网站时,这些行都会添加到日志中)。 ajax.py 中的 dajaxice 函数用于抓取日志文件,以便以某种方式调用需要包含在刷新中。

谁能帮我解决这个问题?我已经为此苦苦挣扎了好几天。

谢谢!!

【问题讨论】:

    标签: javascript dajaxice dajax


    【解决方案1】:

    我能够自己解决。下面的代码对我有用。

    ajax.py

    @dajaxice_register(method='GET')
    def getLogs(request):
      fname = "/path/to/LOG_2015-07-09.log"
      with open(fname,"r") as f:
        lines = f.readlines()
      lines = lines[-15:]
      return json.dumps({'message':lines})
    

    html

     <div class="container-fluid">
      <h4 class="text-center">Log Messages</h4>
      <div class="content">
        <span class='value'></span>
      </div>
      <script language="javascript" type="text/javascript">
        function saveLogs(data){
          sessionStorage.setItem("logs",data.message);
        }
          $(document).ready(
            function() {
              setInterval(function() {
                Dajaxice.InterfaceApp.getLogs(saveLogs);
                var logs = sessionStorage.getItem("logs");
                document.querySelector('.content .value').innerText = logs;      
              }, 3000);
            });
      </script>
    </div>        
    

    我使用 dajaxice 而不是直接的 ajax,在正确配置所有设置之前需要进行相当多的摆弄,但这似乎比尝试学习如何将 ajax 和 php 集成到我的 django 项目中更容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2019-11-19
      • 2018-08-29
      • 2015-09-15
      • 2020-02-13
      相关资源
      最近更新 更多