2015-01-26 47 views
-1

我想教我自己如何在PHP中使用AJAX。但是,我无法获取我的(可能已损坏的)AJAX代码来更改我的$ things变量的值。相反,会发生什么是index.php页面重新加载,并添加一个全新的按钮。这里是我的代码:不明白为什么我不改变我的脚本的php变量

<?php 
     $things = 0; 
?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
    <title>testing</title> 
    <script> 
    function changeMe() 
    { 
     var xmlhttp; 

     if (window.XMLHttpRequest) 
     { 
      xmlhttp = new XMLHttpRequest(); 
     } 

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

     var things = "<?php echo $things; ?>"; 

     things++; 

     xmlhttp.open("GET","index.php?things="+things,true); 
     xmlhttp.send(); 
    } 
    </script> 
    </head> 
    <body> 
    <?php 
     echo "<p>Things = <span id=\"changetest\"" . $things . "</span></p>"; 
    ?> 
    <button type="button" onclick="changeMe()">Change Content</button> 
    </body> 
    </html> 

任何线索,我在哪里搞乱?

+1

是不是你没有''''就像:'echo“

Things = ”。 $东西。 “

”;' – SuckerForMayhem 2015-01-26 21:19:31

+1

如果你只是去index.php?东西= 1你看到你期望的回应? – 2015-01-26 21:19:56

+0

当你调用index时,事物被初始化为0,当你在这个ajax的GET中传递新的东西时,它并不代表该变量的任何东西,所以'var things = php'总是从0开始。 $ things = 0的页面顶部;让它寻找一个像'$ _GET ['things']'这样的参数并将其设为=。那么问题是,那只会真的有效。你的ajax基本上是试图加载同一页面而不知道它之前的状态是什么,因为你不发送任何新数据,没有任何东西被更新,也没有任何变化,所以它会再次重做相同的东西。 – 2015-01-26 21:23:34

回答

-3

您应该删除"<?php echo $things; ?>";附近的引号,并将其替换为var things = <?php echo "'".$things."'"; ?>

+0

这并没有改变任何东西。 – 2015-01-26 21:21:58

+0

我不知道他为什么希望他的JS变量的字面意思是<?php echo $ things; ?>作为一个字符串 - 不仅仅是php变量$ things的值。 – 2015-01-26 21:23:06

+1

@CharlesJohnThompsonIII:您的代码只是将“0”更改为“0”。没有区别。 – Devon 2015-01-26 21:27:31

2

至少有两个问题,我可以看到:

  • 你不使用你要发送回服务器$_GET['things']任何地方的变量。相反,您总是将其设置为0,以便您永远不会看到其他任何内容;
  • 您正在发布到最初的php文件。这意味着响应将是完整的HTML页面,包括head等等。您可能需要一个单独的文件才能发回您真正需要的内容。

一个单独的PHP文件的例子也只是呼应了什么在发送:

<?php 
echo 'I sent the number: ' . intval($_GET['things']); 

现在你应该让一个Ajax请求这个文件,而不是index.php

+0

更新同一页面上的值的正确方法是什么?这是我的原意。 – user2081785 2015-01-26 21:34:26

+0

@ user2081785当您需要来自服务器的信息时,Ajax是正确的方式。你到底需要什么服务器,你在那里存储什么(以及如何)?如果您不需要与服务器进行任何交互,则只需使用普通的JavaScript。 – jeroen 2015-01-26 21:41:04

+0

我的目标是让php在页面上显示一个变量的值,有人点击一个按钮来增加或减少该值,并让原始的php页面反映该新值。然后,我可以稍后将这个新值提交给数据库。我想我需要使用SESSION变量,但我不知道如何使用AJAX来做到这一点。 – user2081785 2015-01-26 21:51:21

相关问题