2015-01-26 75 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

相關問題