我一直在尝试发送php请求而不使用ajax重新加载。但是,我不认为我很了解ajax。我试着查看w3school示例代码并尝试为此提出解决方案:
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "led.php?state=1", true);
xhttp.send();
</script>
<button class="button" onclick = "loadDoc()">LED ON</button>
</br>
</br>
<script>
function loaddoc() {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "led.php?state=0", true);
xhttp.send();
</script>
<button class="button" onclick "loaddoc()">LED OFF</button>
老实说,我不知道自己哪里出错了。当我单击一个按钮时,会发送一个php请求。但是现在这显然不起作用。
有人可以帮忙吗?
此致
PHP代码:
<?php
$onoffdata = $_GET["state"];
$textfile = "LED_data.txt";
$fileLocation = "$textfile";
$fh = fopen($fileLocation, 'w') or die("Error opening file!");
$stringToWrite = "$onoffdata";
fwrite($fh,$stringToWrite);
fclose($fh);
header("Location:index.html");
?>
答案 0 :(得分:1)
&#34;老实说,我不知道自己哪里出错......&#34; =&GT;你实际上只是在那里做部分工作。所以让我回顾一下: 将XMLHttpRequest生命周期分解为多个步骤,您需要:
var xhttp = ...
作业所做的工作。state
)向你提出要求。作为摘要,您可以听到五个readyStates
。查看更多here xttp.open(...)
xttp.send()
所做的事情,你可能已经猜到了。回到你失踪的那一步。
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML =
this.responseText;
}
};
您希望在var http = ...
和xhttp.open
之间执行此操作。
当你的readyState发生变化(从0到4)时,那个块基本上都在说&#34;嘿xttp,执行这个功能。现在函数本身在这种情况下非常简单,但要注意条件。
this.readyState == 4
正在检查请求是否为done
- 当您获得完整的response
和
this.status == 200
正在检查一切是否正常。您可以搜索http status codes
以查找status
可能的各种值。
简而言之,该检查是为了确保请求已完成,并且在尝试使用responseText
进行操作之前一切顺利。在那个W3Schools example中,他们将DOM中元素的innerHTML设置为从服务器返回的内容。基本上用xmlhttp请求的结果做一些事情。在您的代码段中,您只发送请求而不是侦听响应,更不用说用它做任何事情了。
希望有所帮助。
答案 1 :(得分:0)
在你的led.php上输入代码<?php $_GET['state'];?>
然后打开你的浏览器检查器并转到网络选项卡,在右侧你会看到一个预览选项卡,这将返回你的案例中led.php输出的内容, 1或0
答案 2 :(得分:0)
首先通过转到led.php?state = 1来测试led.php的工作方式。这是为了测试页面没有死亡。如果页面没有死亡,那么打开文件并检查它是否显示1.使用下面的代码尝试并关闭led然后检查文件的内容,希望它应该是0。
<script>
function setState(state) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "led.php?state="+state, true);
xhttp.send();
}
</script>
<button type="button" class="button" onclick="setState(1)">LED ON</button>
</br>
</br>
<button type="button" class="button" onclick="setState(0)">LED OFF</button>