2017-03-28 119 views
0

我一直在爲此工作一整天,但認爲我對學習AJAX時可用的各種方法感到困惑。我想讓我的網站顯示Python腳本的結果。我可以做到這一點。通過AJAX將PHP變量傳遞給另一個DIV中的PHP變量

問題是腳本的結果隨機更改(這是我車庫門的狀態),如果車庫門的狀態發生變化,我的站點很笨重。通常用戶必須不斷重新加載頁面才能獲得當前狀態。我試圖讓DIV顯示狀態每5秒更新一次,從而顯示新狀態。

Python腳本需要大約4秒鐘才能運行,所以我想繼續將它作爲函數調用,並將其作爲DIV傳遞到我想要顯示結果的網站上。

如果可能的話,一個PHP文件(index.php)。這是我期望做的骨架。我的get_status函數可以工作,但是我對其餘的部分感到不知所措。

謝謝。

編輯:代碼更新與評論發現小調整。

<html> 
<body> 

<?php 
    function get_status(){ 
     $status = shell_exec('python /path/to/garage_door/myq-garage.py status'); //Equals either 'Open' or 'Closed' 
     echo $status; 
    } 
?> 

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"> 
    var java_status = <?php echo json_encode(get_status) ?>; 

    // I have no idea how to pass a variable from PHP thru javascript to PHP on the 
    // same page. Trying to pass on results of get_status function every 5 seconds. 

    setInterval(function(){ 

     $.ajax({ 
      url: "index.php" 
      type: "POST" 
      dataType: "json" 
      data: ({status: java_status}), 
      success: function(data){ 
       $("#status_div").html(data); 
      } 
     }) 

    }, 5000); 
</script> 

<div id="status_div"> 
    <?php 
     $new_status = json_decode(data); 
    ?>   

    // I have no idea how to get that status variable here. 
    The Garage Door Status is: <?php 
     echo $new_status; 
    ?> 

</div> 
</body> 
</html> 
+0

[你看了在瀏覽器的開發者工具的AJAX請求/響應?你有沒有在項目中包含jQuery庫?是否有任何錯誤報告?你在網絡服務器上運行它嗎?](http://jayblanchard.net/basics_of_jquery_ajax.html) –

+0

你根本不需要'#status_div'中的任何代碼。你應該在你的成功函數中解析'data'並將必要的部分放在'#status_div'中 –

+0

你的Python代碼是否返回JSON? –

回答

2

要正確執行此操作,必須具有有效的HTML,並且不需要發送PHP腳本的任何參數。此外,你需要你的PHP從代碼的其餘部分分開,否則你會得到所有的標記在你的Ajax響應:

PHP腳本 - php_python.php

<?php 
    function get_status(){ 
     $status = shell_exec('python /path/to/garage_door/myq-garage.py status'); //Equals either 'Open' or 'Closed' 
     echo $status; 
    } 
    get_status(); // execute the function 
?> 

HTML頁面 - 的index.php(請注意使用的文件準備好處理的,因爲腳本是在頁面的頂部)

您還需要分開<script>標籤,使用一個加載jQuery庫,另一個用來形容你的JavaScript函數。

<html> 
    <head> 
     <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $(function(){ // you need a document ready handler if you put the script at the top of the page 
      setInterval(function(){ 
       $.ajax({ 
        url: "php_python.php", 
        type: "POST", 
        dataType: "text", 
        success: function(data){ 
         $("#status_div").html('The Garage Door Status is: ' + data); 
        } 
       }) 

      }, 5000); 
     }); 
     </script> 
    </head> 
    <body> 
     <div id="status_div"></div> 
    </body> 
</html> 

如果你剛剛學習jQuery的AJAX here are some basic tips for setting it up and trouble-shooting problems

+0

謝謝!隨着一些修改,我能夠得到這個工作。在php_python.php中沒有任何內容正在運行,因爲該函數沒有被調用,所以我只是在保留$ status變量創建和回顯的情況下將函數行註釋掉了。感謝你解釋一些你的推理。這有助於很多和一些我不知道的重要事情。 – Mike

+0

總有不止一種方法來烙印諺語貓。你可以做的另一件事就是在你關閉函數括號後添加一行'get_status()',就像我在更新的代碼中完成的一樣。如果你所做的只是執行2行代碼,那麼在函數中確實沒有任何意義。 –

0

創建一個頁面,並把它命名爲status.php

status.php包含這些代碼:

$status = shell_exec('python /path/to/garage_door/myq-garage.py status');   
    echo $status; 

讓另一頁的index.php和包括 -

<div id="status_div"> 

</div> 
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 


    <script type="text/javascript"> 

    setInterval(function(){ 

     $.ajax({ 
      url: "status.php", 

      dataType: "html", 

      success: function(data){ 
       $("#status_div").html(data); 
      } 
     }) 

    }, 5000); 
</script> 

希望這會幫助你

+0

謝謝。我將不得不嘗試。我必須在某個地方開車,並在今晚晚些時候嘗試並報告。只要看到這一點,就教會了我一些我自己從未想到的東西。 – Mike

+0

它應該工作,如果我正確理解你想要什麼......謝謝 –

+0

我剛剛嘗試過,但它爲status.php和index.php獲得一個空白頁。在index.php上,我在第三行發現了一個問題。我已將其更改爲:

  • 11. 將PHP變量傳遞給AJAX
  • 12. 將js變量傳遞給php變量
  • 13. 點擊時將div變量中的PHP變量傳遞給jquery
  • 14. 將一個JavaScript變量傳遞給php
  • 15. JavaScript將一個變量傳遞給PHP
  • 16. PHP將一個變量傳遞給array_walk_recursive
  • 17. 將一個JavaScript變量傳遞給php
  • 18. 如何通過SWFObject將Flash變量傳遞給PHP變量
  • 19. 通過AJAX刷新傳遞php變量
  • 20. 通過ajax傳遞php變量
  • 21. 傳遞PHP變量使用AJAX另一個變量?
  • 22. 傳遞一個PHP變量通過URL
  • 23. 通過$將一個變量從一個PHP文件傳遞給另一個.post
  • 24. 通過超鏈接將PHP變量循環傳遞給另一個PHP文件
  • 25. 將AJAX通過JavaScript變量傳遞給PHP時的未定義變量
  • 26. 將php變量(點擊)傳遞給另一個php腳本
  • 27. 將變量從javascript通過ajax傳遞給php
  • 28. 如何將jQuery變量通過AJAX傳遞給PHP頁面
  • 29. 通過AJAX將Javascript變量傳遞給PHP
  • 30. 通過AJAX將變量傳遞給PHP腳本