【问题标题】:Outputting constantly changing text file data onto a webpage via Javascript通过Javascript将不断变化的文本文件数据输出到网页上
【发布时间】:2017-04-20 18:08:24
【问题描述】:

我有一个 python 脚本,它每 2 秒更新一次 output.txt 文件。我能够将 txt 文件数据输出到网页,但由于某种原因,在我重新启动服务器之前它不会更新。我要做的是让网页每 2 秒更新一次 output.txt 文件数据。这是我现在使用的:

var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');

function loadFile() {
    reader.open('get', 'output.txt', true); 
    reader.onreadystatechange = displayContents;
    reader.send(null);
    reader.onreadystatechange = outputData();
}

function displayContents() {
    if(reader.readyState==4) {
        var el = document.getElementById('main');
        el.innerHTML = reader.responseText;
    }
}

function outputData() {
    var refresh = 2000;
    update = setTimeout('loadFile()', refresh);
}

我试图做的是让 outputData 函数每 2 秒调用一次 loadFile 函数,这意味着重新读取 output.txt 文件的更新数据。任何帮助将不胜感激,因为我是网络编程的新手。如果重要的话,我会在 Raspberry Pi 3 上运行 Apache 来创建网页。

编辑:这是我的 python 代码,以防它可能导致问题。

#!/usr/bin/env python
import time
from datetime import datetime

var = datetime.now().time()

while True:
    print(var)
    with open("output.txt", "w") as txtfile:
        print(var, file=txtfile)
    var = datetime.now().time()
    time.sleep(2)

【问题讨论】:

  • 请求正在发出吗?不确定是什么问题?
  • @guest271314 我正在使用
  • 你有什么问题?
  • @guest271314 当我单击按钮时, loadFile() 应该递归运行并每 2 秒将 output.txt 文件内容输出到网页。由于某种原因,它只输出一个数据实例并且从不更新。
  • 和GET请求缓存

标签: javascript python html apache raspberry-pi3


【解决方案1】:

您正在立即调用outputData(),而不是引用要在readystateschange 事件中调用的函数。删除

reader.onreadystatechange = outputData();

displayContents 电话内拨打outputData()。致电loadFile()windowload 活动。

window.onload = function() {
  var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');

  function loadFile() {
    reader.open('get', 'output.txt', true);
    reader.onload = displayContents;
    reader.send(null);
  }

  function displayContents() {
    if (reader.readyState == 4) {
      var el = document.getElementById('main');
      el.innerHTML += reader.responseText + "<br>";
      outputData();
    }  
  }

  function outputData() {
    var refresh = 2000;
    update = setTimeout(loadFile, refresh);
  }

  loadFile()
}

plnkrhttp://plnkr.co/edit/EKh2DsmxtbzMYMlt1F4V?p=preview

【讨论】:

  • 我改变了它,但它似乎没有改变任何东西。
  • 感谢所有帮助。我正在使用的一件事是 而不是 window.onload。这会有所作为吗?
  • 不用担心。使用&lt;body onload="loadFile();"&gt;&lt;/body&gt;plnkr.co/edit/Nl0vXR6nMKnAdYarxNeZ?p=preview,结果应该是一样的
  • 您是否尝试过使用window load 事件的第一版plnkr?你检查过服务器请求和错误日志吗?
  • 好了,好像可以了,但是还是没有输出 output.txt 的更新内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
相关资源
最近更新 更多