Вывод элементов массива
В ответе сервера получаю массив, и вывожу из него элементы в таблицу, затем отдельно показываю последний элемент (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); } |
А что значит первый? index - это индексы массива, он может указывать на первый элемент массива (у вас массив объектов). А val, это свойства объектов, где val.dt_txt, это не первый элемент, а свойство dt_txt объектов. Вы переменной постоянно присваиваете это свойство (переопределяется), а значит по окончанию работы цикла в ней будет значение этого свойства последнего объекта массива data.list. Если нужно значение первого объекта, тогда в цикле так:
if(!index) sd = "<span>Start" + val.dt_txt + "</span>"; |
Спасибо, все правильно. Еще один вопрос вдогонку. Я записываю массив в 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] что делаю неправильно? |
data = localStorage.getItem('user'); //и в запросе так url: 'save.php', data: {q: data}, .... А на сервере полученный json декодировать: $data = json_decode($_POST['q']); Декодирование вернет либо объект (по умолчанию), либо массив, если вторым параметром указать true. |
Спасибо, сделал как вы посоветовали, теперь массив передается, но на сервере пытаюсь посмотреть через
echo $data; ,но вижу пустоту. |
Цитата:
Catchable fatal error: Object of class stdClass could not be converted to string с именем файла и строкой, в которой ошибка была обнаружена. Если после декодирования был получен массив, то вывелся бы тип данных - Array. Массивы/объекты конструкцией echo нельзя просмотреть, для этого служат функции print_r и var_dump. Надо же не самодеятельностью заниматься, а читать и изучать. |
Спасибо, я как раз и учусь. В консоли вижу что в 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); ?> |
Цитата:
Консоль показывает что передается на сервер, но это не значит что вы получили. На сервер передается на массив, а JSON, который представляет из себя строку (data = localStorage.getItem('user')). На сервере нужно получить по ключу q эту строку и декодировать (найдите в руководстве функцию json_decode и почитайте о ней). Если бы вы на сервере получили бы, сделали бы все верно, то после echo $date вы бы получили либо ошибку, либо сообщение Array. У вас же вообще ничего, то есть, $data не определена, равна null. Как вы на сервере принимаете данные? |
Разберетесь с этим, тогда можно будет сказать как передать объект (это содержит ваш json), а на сервере получить сразу массив.
|
Не заметил добавленного.
На каком сервере это исполняется, на удаленном или локальном? Учтите, вываливать ошибки на удаленном сервере не стоит, это почва для анализа не только для вас будет. 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> А у вас не работает потому, что вы в чем-то допускаете ошибки. |
Часовой пояс GMT +3, время: 07:35. |