Mysql запрос дает проблемы с JSON.parse в PHP

0

Я разрабатываю небольшое приложение для обучения.

Для этого приложения у меня есть база данных Mysql, где каждая строка является "задачей". Каждая задача имеет одно поле "статус", в том числе id_task. Когда я нажимаю кнопку, вызов AJAX отправляет запрос в файл PHP, где статус обновляется и результаты извлекаются.

Возможные значения статуса: NULL (по умолчанию) "DONE" и "REMOVE".

Я использую его для создания списка со всеми задачами, и в зависимости от состояния текст будет отображаться зеленым цветом ("DONE"), черным цветом по умолчанию ("NULL") или не появится ("REMOVE").

Да, я мог бы просто удалить "удаленные" задачи, но я предпочитаю поддерживать их в базе данных, если я хочу, чтобы пользователь смог их восстановить

Все работает отлично, когда функция php, которую я создал для этого, имеет этот sql-запрос:

public function retrieveDataByID($p_id_task)
{
    $result="";

    $arraySubjects=array();

    $this->openConnection();
    $sql="SELECT * FROM tareas where id_task=".$p_id_task;

    $result=mysqli_query($this->connection, $sql);

    if($result !=null)
    {

       while($fila=mysqli_fetch_assoc($result))
       {
           $arrayEditedSubjects[]=$fila;

       }



    }else{
        //echo "no results";
    }


    $this->closeConnection();

    return $arrayEditedSubjects;

}

Но когда я хочу отфильтровать запрос, чтобы строки со статусом "REMOVE" не отображались, список не генерируется, и вызов AJAX вызывает эту ошибку:

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON    data

Я не знаю, что может пойти не так. Вот код с проблемным запросом:

public function retrieveDataByID($p_id_task)
{
    $result="";

    $arraySubjects=array();

    $this->openConnection();
    $sql="SELECT * FROM tareas where (id_task=".$p_id_task.") AND (status <> 'REMOVE')";


    $result=mysqli_query($this->connection, $sql);

    if($result !=null)
    {

       while($fila=mysqli_fetch_assoc($result))
       {
           $arrayEditedSubjects[]=$fila;

       }



    }else{
        //echo "no results";
    }


    $this->closeConnection();

    return $arrayEditedSubjects;

}

Вот вызов AJAX, который выдает ошибку, в случае, если это может вам помочь:

$.ajax({

    method:"post",
    data:{'day_and_month':cellIDValue},
    url:"assets/php/retrieve.php",


    success:function(result){

        let parsedResult=JSON.parse(result);

        buildList("#subjectDiv",parsedResult);


   },
   error: function(xhr){
       alert(xhr.status);
   }

});

И вот файл retrieve.php, называемый функцией AJAX

<?php

    require_once('models/Connect.php');/*this is where the retrieveDataByID  function is defined*/

    $arrayJSONresults=array();
    $objConexion=new Connection;

    $arrayJSONresults= $objConexion->retrieveData($_POST['day_and_month']);

    echo json_encode($arrayJSONresults);



?>
  • 2
    echo "no results"; не является json, и если он получит вывод перед json, тогда весь ответ будет недействительным. Ответ JSON должен содержать только одно эхо
  • 2
    попробуйте console.log(result); просмотреть ответ в консоли браузера для отладки
Показать ещё 4 комментария

1 ответ

0
Лучший ответ

Я исправил его, выполнив следующий запрос:

$sql="SELECT * FROM tareas where (id_task=".$p_id_task.") AND ((status IS NULL) OR (status <> 'REMOVE'))";

Поскольку статус по умолчанию NULL, мне пришлось сначала оценить, если статус IS NULL (в другом случае я прочитал, что SQL-движок не может его правильно оценить).

Затем, если это NULL или отличается от "REMOVE" (это означает, что NULL или "DONE"), он будет показан в списке.

Может быть, я делаю этот статус по умолчанию, это что-то отличное от NULL, чтобы этого избежать, но теперь я узнал что-то новое.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню