从txt文件自动更新文本区域

时间:2018-04-06 15:59:53

标签: javascript textarea auto-update

我尝试过在线发布的许多解决方案,但没人能解决我的问题。我有一个带有一些基本元素的php页面。特别是我想实现一个显示txt文件文本的文本区域(只读)。我希望它能够自动更新"文本每1秒或更短时间不按任何按钮或重新加载页面......这就是我现在所拥有的:

<html>
    <head>
        <title>Yun_TempServer_Home</title>

        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
            function getFileContents() {
                var client = new XMLHttpRequest();
                client.open('GET', '/sd/status.txt');
                client.onreadystatechange = function () {
                    document.querySelector("textarea").value = client.responseText;
                }
                client.send();
            }
            setInterval(getFileContents, 1000);

        </script>
    </head>
    <body>

        <textarea  id="textarea"rows="15" cols="50" readonly>
        </textarea>

    </body>
</html>

现在它可以工作,但有时它只读取新文本的一部分,有时它不会更新代码30-40秒。我对php,html和javascript都非常基础,所以请解释一下我该如何解决这个问题..

由于

1 个答案:

答案 0 :(得分:0)

最后我得到了答案,这似乎工作得很好!我发现这篇文章: How to read a local text file? 特别是我用了答案:

function readTextFile(file)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            if(rawFile.status === 200 || rawFile.status == 0)
            {
                var allText = rawFile.responseText;
                alert(allText);
            }
        }
    }
    rawFile.send(null);
}

因为我不想要alert()我只是修改了一下。这是我现在的代码:

<script>
    function readTextFile(file)
{
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", "/sd/status.txt", false);
    rawFile.onreadystatechange = function ()
    {
        if(rawFile.readyState === 4)
        {
            if(rawFile.status === 200 || rawFile.status == 0)
            {
                var allText = rawFile.responseText;
                 document.querySelector("textarea").value = allText;
            }
        }
    }
    rawFile.send(null);
}
    setInterval(readTextFile, 1000);

</script>

使用setInterval(readTextFile, 1000);,它每秒执行一次读数。 如果有人想提出一些变化,我正在等待它!

更新10/04:我用AJAX代码替换了XMLHttpRequest()。这是完美的结果:

<script>
    function readTextFile(file)
{
    var x = document.getElementById("autoScroll").checked; //if autoscrool is checked
    if(x==true){
     document.getElementById("textarea").scrollTop = document.getElementById("textarea").scrollHeight; //autoscroll
    }

    var filePath = "http://192.168.1.50/sd/status.txt"

    $.ajax({
    dataType: "text",
    success : function (data) {
            $("#textarea").load(filePath);
            }
    });

}
setInterval(readTextFile, 1000);

</script>

这里是html部分:

<html>
<textarea  id="textarea" rows="15" cols="50" readonly autocomplete="off">

</textarea>

<br>
<form>
<input id="clear" type="button" value="Clear">
<label><input type="checkbox" value="AutoScroll" id="autoScroll" label="Auto Scroll"checked>    Auto-Scroll</label>
</form>
</html>

我添加了自动滚动复选框以激活或停用textarea的自动滚动。