Отправка JSON в AJAX с использованием PHP - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь показать данные, полученные маленьким скриптом python3, когда кнопка нажимается на веб-сайте без обновления.Для этого я выбрал PHP для выполнения скрипта python3 и AJAX для его показа.Моя проблема заключается в том, что когда дело доходит до отображения данных.

Сценарий python для создания json:

!/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>

PHP-скрипт с именем getData.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);
?>

Когда я запускаю это, таблица ничего не показывает, она не нулевая, содержимое пустое.Но если я изменю массив $ в PHP с полученными переменными JSON на массив чисел, например:

$ array = array (1,2,3);В таблице указаны правильные значения 2 и 3 в правильном месте.

Я пытался отправить полученный в PHP JSON в переменную $ output без изменения, чтобы utf8_encode получил JSON ...

Если я поставлю:

$ array = array (1,2, $ json-> num3);Он показывает только значение 2

. Когда я запускаю PHP-скрипт в CLI, он всегда показывает значения из JSON или помещая числа в массив.Проблема в том, что когда дело доходит до декодирования его в AJAX.

Я хочу показывать только значения JSON на веб-сайте.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Запустите ваш скрипт на Python в CLI, чтобы увидеть, обеспечивает ли он ожидаемый результат.(Мне нужно было сделать мой исполняемый файл). Если это произойдет, запустите скрипт 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']);
}
0 голосов
/ 12 сентября 2018

Вы можете получить доступ к ответу 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...