Показать сообщение отдельно
  #10 (permalink)  
Старый 19.06.2020, 06:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Не заметил добавленного.

На каком сервере это исполняется, на удаленном или локальном? Учтите, вываливать ошибки на удаленном сервере не стоит, это почва для анализа не только для вас будет.

Notice: Undefined index ... это не ошибка, а предупреждение, что индекс q не определен в массиве $_POST, а неопределенное это null, следовательно и на выводе ничего не будет. На удаленном сервере вывод предупреждений подавляется, а ошибки пишут в лог файлы.

Параметры подключения к базе, это не имя сервера, а host, он и на удаленном сервере может быть как localhost. На локальном сервере уже есть по умолчанию установки из ini-файла: server = localhost:3306, user = root, password = "". Для отладки этого и достаточно, а на удаленном параметры хоста вам определит хостер.

localStorage.setItem('user', JSON.stringify(data)); - здесь в локальное хранилище записывается строка которую возвращает JSON.stringify, и это потому, что нельзя в локальное хранилище записать объект, все что в хранилище, это строки - ключи и их значения.

data = JSON.parse(localStorage.getItem('user')); - это декодирование json из локального хранилища, после которого data будет объектом. Поэтому подставив его тут url: 'save.php?q='+data, и получим вывод save.php?q=[object Object]. Правильно было бы

data = localStorage.getItem('user');
//....
url: 'save.php?q='+data


Но в этом случае на сервер бы ушел json как GET параметр, а вы определяете метод передачи POST, ничего не передавая, какой смысл? Поэтому удаляем его из url и передаем как POST - data: {q: data}. А на сервере декодировать $data = json_decode($_POST['q']);

Можно определить для передачи и объект:

var data = JSON.parse(localStorage.getItem('user'));
//а в $.ajax данные
data: data,
//об остальном это забота JQ


В этом случае на сервере print_r($_POST) выдаст ассоциативный массив. Ниже представленный код сохраните под любым именем как php и запустите его. Сервер получит POST данные в массиве $_POST и выведет их в браузер.

<?php
if($_POST) exit(print_r($_POST, 1));
?>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(function() {
    //это объект
    var data = {"cod":"200","message":0,"cnt":40,"city":{"id":524901,"name":"Moscow","country":"RU","population":1000000,"timezone":10800,"sunrise":1592441057,"sunset":1592504230}};
    $.ajax({
        url: location,
        type: 'POST',
        data: data,
        success: function(d) {
            alert(d)
        }
    })
});
</script>
</head>
<body>

</body>
</html>


А у вас не работает потому, что вы в чем-то допускаете ошибки.
Ответить с цитированием