有没有一种方法可以使用Ajax监视文件,并且仍然使用Javascript更新文件

有没有一种方法可以使用Ajax监视文件,并且仍然使用Javascript更新文件,javascript,php,ajax,Javascript,Php,Ajax,我对网络编程相当陌生,我正在从事一个项目,在这个项目中,在一个网页上按下一个按钮,该网页使用Javascript通过一个基本的php服务器文件将一个简单的值写入一个文本文件。该网页还需要有其他铃声/口哨,我可以使所有必需的事情工作良好,但我想监测文本文件中的值,以便我可以显示在网页上的状态。我可以让它使用AJAX代码读取状态,也可以让它将值发送到服务器文件,但我不能让两者在同一个程序中工作 我想,当我从Javascript编写代码时,我必须暂停AJAX代码监控文件,但无论我如何做,我都无法让它工

我对网络编程相当陌生,我正在从事一个项目,在这个项目中,在一个网页上按下一个按钮,该网页使用Javascript通过一个基本的php服务器文件将一个简单的值写入一个文本文件。该网页还需要有其他铃声/口哨,我可以使所有必需的事情工作良好,但我想监测文本文件中的值,以便我可以显示在网页上的状态。我可以让它使用AJAX代码读取状态,也可以让它将值发送到服务器文件,但我不能让两者在同一个程序中工作

我想,当我从Javascript编写代码时,我必须暂停AJAX代码监控文件,但无论我如何做,我都无法让它工作。我尝试过切换一个变量,并将Ajax代码放入IF语句中。我还尝试使用相同的变量在While循环中执行Ajax

我一直在尝试的代码示例如下:

<script type="text/javascript">

var toggleBit;
if (toggleBit = 'on')
{   
    function saveXMLDoc()
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
        {
            xmlhttp=new XMLHttpRequest();
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET","server.php?q=1!",true);
        xmlhttp.send();
        toggleBit = 'off';
    }
}

if (toggleBit = 'off')
{   
    setInterval(function()
    {   
        var ajax = new XMLHttpRequest();
        ajax.onreadystatechange = function()
        {
            if (ajax.readyState == 4)
            {
                if (ajax.responseText == "1") {
                    document.getElementById("p1").innerHTML = "Faulted";
                    document.getElementById("p1").style.fontSize = "xx-large";
                    document.getElementById("p1").style.color = "Red";
                }else if (ajax.responseText == "0"){
                    document.getElementById("p1").innerHTML = "Okay";
                    document.getElementById("p1").style.fontSize = "x-large";
                    document.getElementById("p1").style.color = "green";
                }else{
                    document.getElementById("p1").innerHTML = "Unknown";
                    document.getElementById("p1").style.fontSize = "x-large";
                    document.getElementById("p1").style.color = "yellow";
                }
            }
        };   

        ajax.open("POST", "example.txt", true); 
        ajax.send();

    }, 500);
}
</script>
这是我尝试设置停止AJAX代码的变量,并运行函数将值发送到写入文本文档的PHP服务器文件的许多方法之一。我尝试将其分离,并使用onmouseover事件设置禁用位,效果更好,但当我运行它时,状态正常,我收到一个错误,说当我按下按钮时它无法打开文件

<p><b>System Status: </b><b id ="p1" > </b> </p>

<button type="button" style="color: white" onclick ="toggleBit = 'on';saveXMLDoc()">Emergency</BR>Stop</button>
<div id="myDiv"></div>
PHP服务器文件代码:

<?php
$q = $_REQUEST["q"];
$myFile = "example.txt";
$fh = fopen($myFile, 'w') or die("can't open file"); 
$stringData = "$q\n"; 
fwrite($fh, $stringData); 
fclose($fh); 
?>
我不一定要找人为我写代码,但如果有人有一个更干净的方法来做,或者可以告诉我正确的方向,这将是非常感谢


提前感谢。

在这种情况下,如果我理解正确,我宁愿禁用Ajax发送上的临时按钮,并在Ajax返回后立即重新启用该按钮。通过这种方式,我可以检查html元素的状态,而不是使用本地js变量

<script type="text/javascript">
var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

xmlhttp.onreadystatechange = function()
{
    if (this.readyState == 4 && this.status == 200)
    {
        document.getElementById('placeholder').innerHTML = this.responseText;
    }
}

setInterval(function()
    {
        // Include a timestamp to prevent caching:
        xmlhttp.open('GET', 'example.txt?t=' + new Date().getTime(), true);
        xmlhttp.send();
    }
, 500);

function write_number(value)
{
    xmlhttp.open('GET', 'server.php?q=' + value, true);
    xmlhttp.send();

}
</script>

<p>The value is: <span id="placeholder"></span></p>
<button onclick="write_number(1)">Emergency Stop</button>

将if语句放在函数中。

非常感谢@Midas。这比我尝试的要干净得多。也不像我的,你的工作。我觉得我犯了错误;我试着把if语句移到各处,以使事情顺利进行。不过我有几个问题。我使用POST方法来避免在读取文本文件时进行缓存。使用带有时间戳的GET方法是否有特定的原因或好处?我的另一个问题是,在不禁用interval函数的情况下,是否存在读/写冲突的可能性?再次感谢。@WillFleitz一般来说,GET用于从服务器获取数据,并将数据发布到服务器。但我认为两者都应该起作用。回答你的另一个问题:我只使用了一个AJAX对象,因为它一次只能发出一个请求,所以我认为不会有读/写冲突,最好不要将实际值包含在'server.php?q='+值中,而是使用某种标识符,并将值本身硬编码到php脚本中。
if (toggleBit = 'on')
{   
    function saveXMLDoc()
    {
    }
}