我正在开发一个用于学习目的的小应用程序。
对于这个应用程序,我有一个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);
?>
答案 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,以避免这种情况,但我现在学到了一些东西。