Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2020, 07:42
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Вывод элементов массива
В ответе сервера получаю массив, и вывожу из него элементы в таблицу, затем отдельно показываю последний элемент (ed), а вот первый (sd) показать не получается, помогите пожалуйста
function(data) {

    sc = "<h2>" + data.user.name + "</h2>";
    var wf = "";
    var sd = "";
    var ed = "";
    
    $.each(data.list, function(index, val) {

      wf += "<tr><td>" + val.dt_txt + "</td>"; 
      wf += "<td>" + val.main.min + "</td>";
      wf += "<td>" + val.main.max + "</td>"; 
      wf += "<td>" + val.wind.speed + "</td></tr>";
      ed = "<span>End" + val.dt_txt + "</span>";
      sd = "<span>Start" + val.dt_txt + "</span>";


    });
    
    $("#showС").html(sc);
    $("#start").html(sd);
    $("#end").html(ed);
    $("#showT").html(wf);
  }
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2020, 07:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А что значит первый? index - это индексы массива, он может указывать на первый элемент массива (у вас массив объектов). А val, это свойства объектов, где val.dt_txt, это не первый элемент, а свойство dt_txt объектов. Вы переменной постоянно присваиваете это свойство (переопределяется), а значит по окончанию работы цикла в ней будет значение этого свойства последнего объекта массива data.list. Если нужно значение первого объекта, тогда в цикле так:

if(!index) sd = "<span>Start" + val.dt_txt + "</span>";

Последний раз редактировалось laimas, 18.06.2020 в 11:33.
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2020, 13:08
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Спасибо, все правильно. Еще один вопрос вдогонку. Я записываю массив в localstorage, потом вызываю его и пытаюсь передать как параметр

...
    localStorage.setItem('user', JSON.stringify(data));
...
    data = JSON.parse(localStorage.getItem('user'));

$.ajax({
  url: 'save.php?q='+data,
  dataType: "json",
  type: "POST",
...


но в результате передается только такая строка
save.php?q=[object Object]


что делаю неправильно?
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2020, 13:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

data = JSON.parse(localStorage.getItem('user'));

data = localStorage.getItem('user');
//и в запросе так
url: 'save.php',
data: {q: data},
....


А на сервере полученный json декодировать:

$data = json_decode($_POST['q']);


Декодирование вернет либо объект (по умолчанию), либо массив, если вторым параметром указать true.
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2020, 15:54
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Спасибо, сделал как вы посоветовали, теперь массив передается, но на сервере пытаюсь посмотреть через
echo $data;

,но вижу пустоту.
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2020, 16:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Volun
теперь массив передается, но на сервере пытаюсь посмотреть через
А откуда тогда вы знаете, что он передается? Если все сделано правильно и на сервере после декодирования был получен объект, то парсер бы выдал ошибку:

Catchable fatal error: Object of class stdClass could not be converted to string

с именем файла и строкой, в которой ошибка была обнаружена. Если после декодирования был получен массив, то вывелся бы тип данных - Array.

Массивы/объекты конструкцией echo нельзя просмотреть, для этого служат функции print_r и var_dump. Надо же не самодеятельностью заниматься, а читать и изучать.
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2020, 16:33
Интересующийся
Отправить личное сообщение для Volun Посмотреть профиль Найти все сообщения от Volun
 
Регистрация: 24.03.2019
Сообщений: 21

Спасибо, я как раз и учусь. В консоли вижу что в save.php передается такой массив

q: {"cod":"200","message":0,"cnt":40,"list":[{"dt":1592492400,"main":{"temp":29.27,"feels_like":29.65,"temp_min":28.75,"temp_max":29.27,"pressure":1017,"sea_level":1016,"grnd_level":1001,"humidity":43,"temp_kf":0.52},"weather":[{"id":802,"main":"Clouds","description":"scattered+clouds","icon":"03d"}],"clouds":{"all":35},"wind":{"speed":1.65,"deg":240},"sys":{"pod":"d"},"dt_txt":"2020-06-23+12:00:00"}],"city":{"id":524901,"name":"Moscow","coord":{"lat":55.7522,"lon":37.6156},"country":"RU","population":1000000,"timezone":10800,"sunrise":1592441057,"sunset":1592504230}}

и пытаюсь на сервере получить из него значение city.name
на сервере выдает ошибку

PHP Notice: Undefined index: q in save.php on line 13

файл save.php такой

<?php
$servername = "";
$username = "";
$password = "";
$db = "";

$conn = new mysqli($servername, $username, $password, $db);

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$data = json_decode($_POST['q']);


print_r ($data);

?>

Последний раз редактировалось Volun, 18.06.2020 в 16:46.
Ответить с цитированием
  #8 (permalink)  
Старый 18.06.2020, 16:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Volun
я как раз и учусь
На чем же вы учитесь, если содержимое массива (как вы того ожидаете) пытаетесь выводить с помощью echo? Скачайте (выбирайте CHM с примерами) хотя бы руководство и изучайте в нем назначение функций.

Консоль показывает что передается на сервер, но это не значит что вы получили. На сервер передается на массив, а JSON, который представляет из себя строку (data = localStorage.getItem('user')). На сервере нужно получить по ключу q эту строку и декодировать (найдите в руководстве функцию json_decode и почитайте о ней).

Если бы вы на сервере получили бы, сделали бы все верно, то после echo $date вы бы получили либо ошибку, либо сообщение Array. У вас же вообще ничего, то есть, $data не определена, равна null.

Как вы на сервере принимаете данные?

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

Разберетесь с этим, тогда можно будет сказать как передать объект (это содержит ваш json), а на сервере получить сразу массив.
Ответить с цитированием
  #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>


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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива списком aj-nik Общие вопросы Javascript 8 13.10.2014 19:43
Вывод случайных элементов из массива в таблицу Narm0 Общие вопросы Javascript 10 06.08.2013 12:39
поочередный вывод элементов массива seosovest Общие вопросы Javascript 7 09.04.2012 10:47
вывод поочередно элементов массива Димтрий Элементы интерфейса 17 07.03.2012 00:43
Вывод переменного по количеству элементов массива из json ArmagedDance Элементы интерфейса 4 08.06.2011 10:45