Как преобразовать строку php в json по идентификатору? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть кнопка, которая приведет меня к endDate.php, чтобы обновить базу данных и вернуть текст об истинности или ложности этого прогресса. Я не знаком с JSON и JavaScript, поэтому лучше всего комбинировать коды php и JavaScript.

Итак, проблема теперь в том, что когда я нажимаю кнопку, на моей странице действительно отображается значение true или false из php, но когда мне нужно было всплывающее сообщение с предупреждением, оно показывает, что Type error: Unable to get the property of 'value' of undefined or null references. Как я могу преобразовать тип данных из php в json, чтобы его можно было использовать для моего оператора условия в JavaScript?

задача. php

часть, которая получает value как истинное или ложное

    <?php
    session_start();
    if(isset($_SESSION['value'])){

    echo "<p name='va' id='va' >".$_SESSION['value']."</p>";
  };
    session_destroy();
?>

Кнопка для завершения задачи и сообщение об ошибке, чтобы проверить, завершен ли процесс уже путем получения значения в тексте.

<?php

              echo "<tr>
              <td>
              <button onclick='endProcess(".$row->task_id.")' type='submit'  name='end' id='end'>END</button>
              </td>
              </tr>";
            }
            $conn->close();
        ?>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

        function endProcess(task_id){
          var myObj;
          myObj = task_id;
          var myJSON = JSON.stringify(myObj);
          window.location = "endDate.php?x=" + myJSON;

          try{
            var jobValue = document.getElementById('va').value;

            if (jobValue === "false") throw "has not yet started!";
            if (jobValue === "true") throw "has closed.";

          }
          catch(err){
            alert("The task " + err)
          }
        }

        </script>

дата окончания. php

    session_start();


    $_SESSION['value'] = 'true';

    header('location:'. $_SERVER['HTTP_REFERER']);
    exit();
    }

1 Ответ

0 голосов
/ 18 июня 2020

Хотя использование AJAX может быть более эффективным в этом случае, в теории нет ничего плохого в том, как вы сейчас отправляете данные.

Проблема, похоже, в том, как вы пытаетесь с ней справиться, когда вас перенаправляют обратно к задаче. php.

Ваш блок try находится внутри функции, которая запускается только при нажатии кнопки, и происходит после команды window.location, то есть никогда не будет выполняться ни при каких обстоятельствах.

Но мне кажется, вам нужно, чтобы этот фрагмент кода запускался при первой загрузке вашей страницы, чтобы он мог проверять значение каждый раз. Так что я думаю, что на самом деле его вообще не должно быть внутри какой-либо функции.

Попробуйте вот так:

function endProcess(task_id) {
  var myObj;
  myObj = task_id;
  var myJSON = JSON.stringify(myObj);
  window.location = "endDate.php?x=" + myJSON;
}

try {
  var jobValue = document.getElementById('va').value;

  if (jobValue === "false") throw "has not yet started!";
  if (jobValue === "true") throw "has closed.";
}
catch(err) {
  alert("The task " + err)
}

PS Я на 99,9% уверен, что вам не нужно JSON Вот. В вашу функцию endProcess передается идентификатор задачи, который, исходя из вашего кода PHP, я сильно подозреваю, является либо числом, либо простой строкой. Таким образом, этого должно быть достаточно, чтобы функция выглядела так:

function endProcess(task_id) {
  window.location = "endDate.php?x=" + task_id;
}

PPS Try / catch не совсем подходящий механизм для простого тестирования значения - он предназначен для перехвата исключений в коде, а не для принятия решений. о том, какое сообщение отображать. Просто простые инструкции if и строка состояния были бы более подходящими:

var jobValue = document.getElementById('va').value;
var status = "The task ";    
if (jobValue === "false") status += "has not yet started!";
else if (jobValue === "true") status += "has closed.";
alert(status);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...