运行ajax的问题

时间:2017-05-06 00:07:29

标签: php jquery ajax

我一直在尝试发送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");
?>

3 个答案:

答案 0 :(得分:1)

&#34;老实说,我不知道自己哪里出错......&#34; =&GT;你实际上只是在那里做部分工作。所以让我回顾一下: 将XMLHttpRequest生命周期分解为多个步骤,您需要:

  1. 实例化XMLHttpRequest对象;这就是您对var xhttp = ...作业所做的工作。
  2. 添加事件侦听器。这是你基本上告诉它在每个阶段做什么(我应该在这里说state)向你提出要求。作为摘要,您可以听到五个readyStates。查看更多here
  3. 发起您使用xttp.open(...)
  4. 所做的请求
  5. 然后你发送请求。这就是你对xttp.send()所做的事情,你可能已经猜到了。
  6. 回到你失踪的那一步。

    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

enter image description here

答案 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>