Я разрабатываю небольшое приложение для обучения.
Для этого приложения у меня есть база данных Mysql, где каждая строка является «задачей». У каждой задачи есть одно поле «статус», например id_task. Когда я нажимаю кнопку, вызов AJAX отправляет запрос в файл PHP, где обновляется статус и извлекаются результаты.
Возможные значения состояния: NULL (по умолчанию), "DONE" и "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;
}
Но когда я хочу отфильтровать запрос, чтобы строки со статусом "УДАЛИТЬ" не отображались, список не создается, и вызов 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);
?>
echo "no results";
не является json, и если он выводится перед json, то весь ответ недействителен. Ответ json должен содержать только одно эхопопробуйте
console.log(result);
просмотреть ответ в консоли браузера в целях отладки@charlietfl исправил это, но у меня все еще та же проблема.
Посмотрите, что на самом деле отправляется с сервера, проверив запрос в сети инструментов разработчика браузера. Вы можете посмотреть там тело ответа и скопировать его в валидатор json и/или понять, почему он не работает.
Не по теме:
$arrayJSONresults="";
разве вы не должны определять$arrayJSONresults = array();
или$arrayJSONresults = [];
вместо этого для лучшей читабельности. Как вы сделали со своим$arraySubjects=array();
@RaymondNijland Правда, я этого не заметил!