我试图显示在不刷新的情况下在网站上单击按钮时在一个小的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值。
答案 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>