У меня в js коде формируется массив dataArr вида [0,4,5,4,7,4,5,27]
Как мне отправить его в бд, а потом забрать от туда в прежнем виде? Пытаюсь делать так:
AJAX:
$(document).ready(function(){
var lessonProgress = window.localStorage.getItem('dataArr'); //console.log = 0,2,,,,,,,,,,,,,,
var data = JSON.stringify(lessonProgress); //console.log = "0,2,,,,,,,,,,,,,,"
$.ajax({
type: "POST",
url: "../../php/setData.php",
data: data,
dataType: 'json',
})
});
PHP (setData.php):
<?php
require "db.php";
$data = $_POST;
if (isset($_SESSION['logged_user'])) {
// Получаем id юзера чья сессия
$userid = $_SESSION['logged_user']->id;
// Загружаем данные об этом юзере
$user = R::load( 'users', $userid );
//Загружаем таблицу courses юзера
$course = R::load( 'courses', $userid );
$course->lessonProgress = json_encode($data); //В бд появляется {"\"0,2,,,,,,,,,,,,,,\"": ""}
$user->ownCourseList[] = $course;
R::store($user);
}
?>
Пытаюсь получить обратно
AJAX:
$(document).ready(function(){
$.ajax({
type:'POST',
url: 'php/getData.php',
data: false,
dataType: 'json',
success: function(data){
alert(data);
}
});
});
PHP (getData.php):
<?php
require "db.php";
header('Content-Type: application/json');
if (isset($_SESSION['logged_user'])) {
// Получаем id users чья ссесия
$userid = $_SESSION['logged_user']->id;
// Загружаем данные об этом user
$user = R::Load('users', $userid);
//подгружаем дарные с таблицы Courses
$course = R::load('courses', $userid);
$lessonProgress = $course->lesson_progress;
}
echo json_decode($lessonProgress);
?>
В этом случае ответ от сервера:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Используйте json_encode и json_decode, т.е. при записи значения в БД - Вы должны сериализовать массив в строку, а при выборке из БД - десериализовать.
$course->lessonProgress = json_encode($data);
Как альтернатива, если значения содержат только цифры, то можно просто произвести конкатенацию элементов массива в строку с помощью join и разделить обратно с помощью str_split:
// "0,4,5,4,7,4,5,27"
$course->lessonProgress = join(",", $data);
Таким образом иногда поступают, когда значения (в Вашем случае номера уроков) являются первичными ключами какой-либо таблицы. После этого при выборе всех значений по их Id можно будет использовать IN оператор.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Существует ли библиотека JSON, в которой можно обращаться к элементам с помощью []
При запуске Activity вылетает ошибка и приложение закрываетсяРаньше она запускалась, но перестала после того как в классе (который я передаю...