使用PHP

时间:2018-09-12 08:44:41

标签: php json ajax

我试图显示在不刷新的情况下在网站上单击按钮时在一个小的python3脚本中接收到的数据。为此,我选择了PHP执行python3脚本,并选择AJAX进行显示。我的问题是在显示数据时。

用于创建json的python脚本:

!/usr/bin/env python3
import json

def receive_json():
    message = {'num1':1, 'num2':2, 'num3':3}
    print(json.dumps(message))

receive_json()

网站上显示收到消息的AJAX代码:

<div class="row">
  <table class ="center">
    <tr>
      <td id="plot2">num2</td>
      <td id="plot3">num3</td>
    </tr>
  </table>

  <div id = "actualDataButton">
  <button type="button"  onclick="callPHPscript()">Get actual data</button>
  </div>

  <script type="text/javascript">
      function callPHPscript(){
        $.ajax({
          url:'getData.php', //the page containing php script
          type: 'POST',
          dataType: 'json',
          contentType: 'application/json; charset=utf-8',
          success:function(result){
            $("#plot2").html(result[1]);
            $("#plot3").html(result[2]);
          }
        });
      }
  </script>

</div>

名为getData.php的php脚本:

<?php
$command = escapeshellcmd('/Users/Borjis/Sites/receive_json.py');
$output = shell_exec($command); //JSON received
$json = json_decode($output);
$array = array($json->num1,$json->num2,$json->num3);
echo json_encode($array);
?>

运行此命令时,表未显示任何内容,它不为null,内容为空。但是,如果我用接收到的JSON变量将PHP中的$ array更改为一个数字数组,如下所示:

  

$ array = array(1,2,3);   该表在正确的位置显示了正确的值2和3。

我试图在$ output变量中发送PHP中接收到的JSON而不进行修改,以utf8_encode接收到的JSON ...

如果我放:

  

$ array = array(1,2,$ json-> num3);   它只显示值2

当我在CLI中运行PHP脚本时,它总是显示JSON中的值或将数字放入数组中。问题在于在AJAX中对其进行解码。

我只想在网站上显示JSON值。

2 个答案:

答案 0 :(得分:1)

在CLI中运行python脚本以查看其是否提供了预期的输出。 (我必须使我的文件可执行),如果运行,请运行您的getData.php脚本以查看其是否返回预期的输出。

由于您的python脚本已经返回JSON,因此我将getData.php更改为以下内容,因此它仅返回从您的python脚本接收的数据:

<?php
$command = escapeshellcmd('/Users/Borjis/Sites/receive_json.py');
$output = shell_exec($command); //JSON received
echo $output;
?>

现在,由于您从getData.php的输出应该是

{'num1':1, 'num2':2, 'num3':3}

更改您的JavaScript代码以从JSON访问密钥。更改

success:function(result){
  $("#plot2").html(result[1]);
  $("#plot3").html(result[2]);
}

success:function(result){
  $("#plot2").html(result['num2']);
  $("#plot3").html(result['num3']);
}

答案 1 :(得分:-1)

您可以将JSON响应作为对象来访问,并使用“。”来访问成员变量。操作员。

<script type="text/javascript">
          function callPHPscript(){
            $.ajax({
              url:'getData.php', //the page containing php script
              type: 'POST',
              dataType: 'json',
              contentType: 'application/json; charset=utf-8',
              success:function(result){
                var r=JSON.parse(result); // Store your JSON response in a variable to access the response 
                $("#plot2").html(r.num2);
                $("#plot3").html(r.num3);
              }
            });
          }
      </script>