2017-03-28 10 views
0

私はこれを1日中働いていましたが、AJAXを学んでいる間に利用可能なさまざまな方法を混乱させると思います。私は自分のウェブサイトにPythonスクリプトの結果を表示したい。私はそれを行うことができます。AJAX経由のPHP変数を他のDIVのPHP変数に渡す

問題は、ガレージドアの状態が変わった場合、スクリプトの結果がランダムに変化することです(私のガレージドアの状態です)。通常、ユーザーは現在のステータスを取得するためにページをリロードし続ける必要があります。私は5秒ごとに更新するステータスを示すDIVを持っているので、新しいステータスを表示しようとしています。

Pythonスクリプトの実行には約4秒かかります。そのため、関数として呼び出して、結果を表示したいサイトのDIVとして渡したいと思います。

可能であれば、1つのPHPファイル(index.php)。ここに私が何をしようとしているかの骨格があります。私のget_status関数は動作しますが、残りの部分は失われています。

ありがとうございます。

EDIT:コメントがコメントされたマイナーチェイクでコードが更新されました。

<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ライブラリを含めましたか?エラーが報告されていますか? ] Webサーバーでこれを実行していますか?](http://jayblanchard.net/basics_of_jquery_ajax.html) –

+0

'#status_div'にはコードはまったく必要ありません。あなたの成功関数で 'data'を解析し、必要な部分を'#status_div'に置きます。 –

+0

PythonコードがJSONを返していますか? –

答えて

2

これを正しく行うには、有効なHTMLが必要で、PHPスクリプトにパラメータを送る必要はありません。また、あなたはあなたのAJAX応答でバックマークアップのすべてを取得する他に、コードの残りの部分からあなたのPHPを分離する必要があります。

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(スクリプトは、ページの上部にあるため、文書準備ハンドラの使用を注意してください)

あなたはまた、記述するためにjQueryライブラリと別のものをロードするために1を使用して、<script>タグを区切る必要がありますあなたの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

諺の猫には常に複数の方法があります。もう1つのことは、更新されたコードで行ったように、関数ブラケットを閉じる直後に '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> 

をにincludeこれがあなたを助けることを願っています

+0

ありがとうございます。私はそれを試みなければならないでしょう。私はどこかを運転しなければならないし、今夜後にそれを試して、報告する。それを見ているだけで、決して私が決して見つけたことのないことを教えてくれました。 – Mike

+0

私はあなたが望むものを正しく理解すればうまくいくはずです...ありがとう –

+0

私はそれを試しましたが、status.phpとindex.phpの両方に空白のページがあります。 index.phpで私はあなたの3行目で問題を捉えました。私はそれを

  • 11. PHPオブジェクトをAJAX経由で渡す
  • 12. JS変数をPHP変数に渡す
  • 13. 関数の外に渡す変数PHP
  • 14. AJAX JavaScript関数にPHP変数を動的に渡す
  • 15. AJAX対JS。 PHPの変数
  • 16. PHPからajaxに変数を渡してSQLクエリに渡す
  • 17. PHPからJSONへのJSON AJAX経由で16進数の角カッコを渡す
  • 18. リフレッシュせずに他のPHPに変数を渡す
  • 19. Ajax変更PHP変数
  • 20. jquery ajaxを使用してJSONをPHPの変数に渡す
  • 21. PHPからJSONでエンコードされた変数をPOST経由でJavascriptに渡す
  • 22. AJAX PHP showResponse複数のDIV
  • 23. 次のページに変数を渡すPHP
  • 24. DIVで他のPHPページ内にPHPページを表示し、URLに動的変数を渡す
  • 25. php変数をjQuery関数に渡す
  • 26. php変数をjavascript関数に渡す
  • 27. PHP変数をJavaScript関数に渡す
  • 28. PHP変数を渡す
  • 29. AJAX経由で変数を送信
  • 30. PHP静的変数をクラス内の他の変数に使用