Mysql查询在PHP中给出了JSON.parse的问题

时间:2018-04-07 22:20:54

标签: javascript php jquery mysql

我正在开发一个用于学习目的的小应用程序。

对于这个应用程序,我有一个Mysql数据库,其中每一行都是一个“任务”。每个任务都有一个“status”字段,其中包括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);
   }

});

这是在AJAX函数

上调用的 retrieve.php 文件
<?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);



?>

1 个答案:

答案 0 :(得分:0)

我修复了它,执行以下查询:

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

由于默认状态为NULL,我必须首先评估状态是否为NULL(在其他情况下,我读过SQL引擎无法正确评估它)。

然后,如果它是NULL,或者与“REMOVE”(即NULL或“DONE”)不同,它将显示在列表中。

也许我这样做的默认状态是不同的NULL,以避免这种情况,但我现在学到了一些东西。