Как передать массив из php в javascript
Перейти к содержимому

Как передать массив из php в javascript

  • автор:

Как передать из php в javascript массив?

Каким образом можно передать php массив в javascript?

В коде на php имеем:

$kolz5 = mysql_query("SELECT * FROM numbers") or die ("error: ".mysql_errno()); $content = array(); while (($row=mysql_fetch_assoc($kolz5)) !== false)

в коде javascript принимаем:

Пробовал с помощью json_encode, но таким образом, т.к. в массиве есть текст, вместо него передается абракадабра типа u. и т.д.

  • Вопрос задан более трёх лет назад
  • 29169 просмотров

Комментировать
Решения вопроса 1

vyshkant

$content = array('абвгд', 'abcdefg', '12345'); echo json_encode($content);

JS (+jQuery):
alert($.parseJSON(data));
Если у вас почему-то отображается абракадабра, то проблема точно не в JSON’е, а в кодировке.
То есть должно быть соответствие кодировки поля в таблице и кодировки html-документа (например, UTF-8):

При этом в базе должно быть установлено:
Collation: utf8_general_ci
Ответ написан более трёх лет назад
Нравится 2 22 комментария

FanatPHP

вынужден тебя разочаровать, вопреки распространенному суеверию, HTML теги на кодировку страниц на сайте не влияют

deenween

все верно, скорее всего в кодировке. у меня везде utf8, все корректно отображается.

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса

я проверил, везде выставлена правильная кодировка
alert($.parseJSON(data));

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса

Анатолий K: ок, а как с ним работать после parseJSON? Вот я получил и массив и не могли бы чирикнуть как с этим дальше обращаться? или ссылку кинуть на мануалы?

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса

Анатолий K: Т.е. подразумевалось, что массив распарсили и теперь его можно юзать. Как с ним работать?

Petroveg

FanatPHP: Описание в тэге meta может повлиять на парсинг, если в Content-Type с сервера нет указания кодировки и документ пришёл без BOM. Разнюхивание кодировки — весьма многоэтапный процесс.
Но вы правы, практиковать выдачу текстового документа без указания кодировки — глупость вселенская.

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса
Анатолий K: теперь ясно, ок, спасибо большое!)

FanatPHP

Евгений Петров: ни один браузер не читает кодировку из меты.

Petroveg

FanatPHP: Надо ребятам из консорциума сказать, что они глупостью занимаются:)

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса

alert( user.friends[1] ); // 1
мы обращаемся к friends и выбираем его второй элемент, а если у меня
[< "thelocation" : "москва", "":"">,< "thelocation" : "london", "":"">], то как мне обратиться допустим ко второму thelocation?

FanatPHP

Евгений Петров: не глупостью, когда открывается файл, то его кодировка да — берется из меты

Petroveg

FanatPHP: Поставьте в настройках сервера пустую кодировку, HTML-файл с кусками русского текста сохраните в UTF без BOM, а в meta поставьте charset=»windows-1251″.
Полюбуйтесь на кракозябры, потом замените на charset=»utf-8″ и наблюдайте чудесное исправление символов на нормальные.

Petroveg

FanatPHP: Когда открывается файл, ищется charset в Content-Type. Если там нет, загружается первые 500 байт (так вроде. ) и определяются первые несколько байт. Если эти байты не представляют собой BOM, то ищется meta и атрибут charset.

Файлы в UTF без удаления сигнатуры открываются нормально и без указания кодировки с сервера, и без всяких meta. Но если удалить сигнатуру, и кодировку с сервера не отдавать — вот тогда meta и нужен. И браузеры его читают.

FanatPHP

Евгений Петров: когда открывается файл, никакого Content-Type нет

Petroveg

FanatPHP: А вот тут поясните — когда браузер получает HTTP-сообщение, то HTTP Headers нет? Как это возможно?

FanatPHP

Евгений Петров: когда браузер запрашивает НТТР ресурс, тогда НТТР заголовки есть. Когда открывает файл — откуда они возьмутся?

Petroveg

FanatPHP: Браузер получил HTTP-сообщение с заголовками, в которых есть Content-Type с типом и кодировкой, и телом, в котором находится текст для предстоящего парсинга. И вот когда браузер начинает парсинг, то секция заголовков чудесным образом испаряется?)

А вообще, я только лишь поправил вас — meta читается при необходимости всеми браузерами. Надеюсь, по этому моменту прения закончены?)

Petroveg

FanatPHP: А вот Content-Type в meta внутри документа никто не читает, это да. Но не charset.

FanatPHP

Евгений Петров: если это НТТР ответ с типом и кодировкой, то на мету не смотрит никто и никогда. По поводу чтения меты — я тестировал давно и на HTML4. При запросе НТТР ресурсов мета игнорировалась, при открытии файлов — использовалась

Petroveg

FanatPHP: Так я и написал выше, что при наличии charset в Content-Type от сервера или сигнатуры в самом документе никакая meta не нужна. Как проверить — также описал.

Я не понимаю, что вы имеете ввиду под термином «при запросе мета игнорировалась». Информация из меты берётся при нехватке информации о кодировке HTML-документа (Content-Type, BOM) только в процессе парсинга. Причём тут получение, не пойму.

vyshkant

limpopo1992: отвечаю на ваш вопрос: если у вас есть массив
var arr = [< "thelocation" : "москва", "":"">,< "thelocation" : "london", "":"">];
то ко второму thelocation можно обратиться так:
alert(arr[1].thelocation);

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса
Антон Дышкант: спасибо, я разобрался!)
Ответы на вопрос 3

FanatPHP

Чебуратор тега РНР

абракадабра типа u. и т.д.

и что? чем она тебе мешает?
Ответ написан более трёх лет назад
Нравится 1 3 комментария

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса
забить и дальше javascript»ом работать в этими данными?

FanatPHP

можешь так, а можешь хоть раз в жизни почитать документацию к json_encode. Без разницы

limpopo1992

limpopo1992 @limpopo1992 Автор вопроса
FanatPHP: я знаю, что можно параметр дописать по кодировки, но у меня не такая свежая версия php

  

Функция PHP json_encode возвращает строку, содержащую JSON эквивалент стоимости переданного ей в качестве мы демонстрируем здесь с численно индексированный массив:

Или это попробуйте

  

The implode() function returns a string from the elements of an array.
The implode() function accept its parameters in either order. However, for consistency with explode(), you should use the documented order of arguments.
The separator parameter of implode() is optional. However, it is recommended to always use two parameters for backwards compatibility.
This function is binary-safe.

Как передать массив из php в javascript

@AlexChebotarsky Посмотрите в браузере исходный код полученной страницы.

1 июл 2017 в 19:40

Простите, за то давно задал вопрос и только сейчас отписываюсь. Зашёл в консоль (кстати не знал что консоль настолько удобный инструмент предупреждающий об ошибках в js, спасибо, теперь знаю), и увидел что в js вставился массив, естественно в формате json, но был без кавычек, добавил всё исправилось и побежал радостный дальше заканчивать модуль, и не поблагодарил своих спасителей, спасибо всем!

Финт: передача PHP массива в JavaScript

В этой заметке мы покажем способ передачи данных из PHP массива в JavaScript.

Если перед вами стоит такого рода задача, то лучше воспользоваться форматом JSON.

В переменной $php_variable может быть любой PHP массив.

  

Пример запись непосредственно в коде JavaScript:

drawChart(600/50, , . )

Удобство в том, что JSON-строку легко распарсить через JSON.parse(..):

var s = "JSON-строка"; var obj = JSON.parse(s);

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://stackoverflow.com/questions/4885737/pass-a-php-array-to-a-javascript-function
Перевел: Станислав Протасевич
Урок создан: 27 Июля 2016
Просмотров: 19119
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Как передать массив из php в js и получить значение?

Добрый день, столкнулась с проблемой что при передачи массива из php в js не получается потом получить элемент этого массива.

$key = array_keys($_POST); $nameTable = $key[0] . "_chat"; $query = $connect->query("SELECT message, sender, recipient FROM `$nameTable` ORDER BY id DESC LIMIT 30"); $arr = $query->fetchAll(); echo json_encode($arr);
$.ajax( < url: '/updateMessages', type: "POST", data: params['id'], success: function(result) < alert(result); >>);

5d820aaef1d53916228191.png

Плучается такой результат

Хотела получить элемент с помощью alert(result[0]);
Но выдает только одну букву а не элемент

  • Вопрос задан более трёх лет назад
  • 2799 просмотров

Комментировать
Решения вопроса 3

rammtw

Press CTRL+S to save project
Используйте сперва JSON.parse(result);
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

glaphire

Daria Motorina @glaphire Куратор тега PHP
PHP developer

Что именно возвращает alert(result[0])? Какое конкретное значение?
Сделайте JSON.parse, чтобы распарсить ответ и там искать реальный элемент или укажите в ajax dataType:»json», чтобы ajax знал, ответ какого формата ожидает от сервера

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Либо в JS делайте
JSON.parse();
Либо на PHP укажите заголовок

header('Content-Type: application/json; charset=utf-8');

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 1
BATPYIIIKOB @BATPYIIIKOB

Всё верно. Вам возвращается первый элемент строки. Т.к. JSON это по сути строка как тип данных, а нулевой элемент в строке это есть первый символ. Для того, чтобы работать с JSON как с массивом — его необходимо преобразовать в массив (распарсить). О чём выше вам и написали :). Обмен между JS и PHP также реализуется с помощью преобразований в строку (JSON,XML,serialize string и т.д.). Не забывайте после передачи данных их распарсить. Единичные элементы (не массивы, не объекты и т.д..) можно передавать как есть, но может потребоваться преобразование типов.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

javascript

  • JavaScript
  • +1 ещё

Выгрузка JS кода в php, но не просто?

  • 1 подписчик
  • 3 часа назад
  • 43 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *