Как передать массив из 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. и т.д.

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

Комментировать
Решения вопроса 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

Задавал этот вопрос в одной из тем этого форума и меня отправили учить. учил-учил и ни к чему толковому не пришёл.

Есть три формы (select), содержимое которых изменяется взависимости от выбора предыдущих (первая статическая), причём выборка последующих происходит через запрос к базе мускуль.

в массиве явескрипт нужны 2 поля (id и title) — соответственно получается двумерный массив (кроме первого), как их передать?

не знаю правильно — нет сделал, может идея правильная, но где-то мелкие ошибки.

function SectionArray ( )
section = newArray
(» $result = mysql_query ( «SELECT * FROM discipline_section_tbl WHERE id_discipline= $id » ) ;
while ( $row = mysql_fetch_array ( $result ) )
<
?>
section =
section [j]= >
?> «)
>

подскажите плиз, а то мозг уже кипит. 😮

7 ответов

11 мая 2007 года
3.0K / / 04.07.2006

Бредятина какая-то у тебя написана, но постараюсь телепатически помочь:

function SectionArray ()
<
section = new Array();

$result = mysql_query(«SELECT * FROM discipline_section_tbl WHERE id_discipline=$id»);
$i = 0;
while ($row = mysql_fetch_object($result))
<
echo «section [$i][0]= $row->id;\n»;
echo «section [$i][1]= ‘$row->title’;»;
$i++;
>
?>
>

Выглядит жутковато.
Я не тестировал — проверь сам.

Можешь также глянуть в сторону неплохой функции json_encode()
http://ru2.php.net/manual/ru/function.json-encode.php
Только перед ее употреблением проверь ее наличие в твоем РНР интерпретаторе.

11 мая 2007 года
37 / / 18.01.2007

не работает такая штука. может и я не правильно пытаюсь отобразить.
сделал массив из одного элемента:

sections = new Array();
$result = mysql_query ( «SELECT * FROM discipline_section_tbl» ) ;
$i = 0 ;
$row = mysql_fetch_object ( $result ) ;
echo «section [ $i ] = $row->id ; \n » ;
?>

есть такая функция:

function createMenus ( )
<
for ( var i = 0 ; i < 5 ; i ++ )
<
document . Menu . section . options . text = sections ;
>
>

запускаю функцию:

и пытаюсь вывести массив:

пример взял отсюда: http://www.javaportal.ru/javascript/examples/dynamicmenu.html
11 мая 2007 года
331 / / 16.09.2006

А разве в ЖС так вот сразу создаются элементы произвольной глубины многомерного массива? Как там по докам — не помню, но у меня никогда не получалось, поэтому приходилось записывать как:

//.
while ($row = mysql_fetch_object($result))

echo «section [$i][0]= $row->id;\n»;
echo «section [$i][1]= ‘$row->title’;»;
$i++;
>

11 мая 2007 года
3.0K / / 04.07.2006

2InterWen: не уверен =)

Вот дернул кусок кода из движка Sajax, который преобразовывает переменные, массивы и объекты РНР в JSON строки. Написано не очень красиво, но работает. Повторюсь — это кусок кода либы, писал ее не я.

//
// Helper function to return an eval()-usable representation
// of an object in JavaScript.
//
function sajax_get_js_repr ( $value ) <
$type = gettype ( $value ) ;

if ( $type == «boolean» ) <
return ( $value ) ? «Boolean(true)» : «Boolean(false)» ;
>
elseif ( $type == «integer» ) <
return «parseInt( $value )» ;
>
elseif ( $type == «double» ) <
return «parseFloat( $value )» ;
>
elseif ( $type == «array» || $type == «object» ) <
//
// XXX Arrays with non-numeric indices are not
// permitted according to ECMAScript, yet everyone
// uses them.. We’ll use an object.
//
$s = » < " ;
if ( $type == «object» ) <
$value = get_object_vars ( $value ) ;
>
foreach ( $value as $k => $v ) <
$esc_key = sajax_esc ( $k ) ;
if ( is_numeric ( $k ) )
$s .= » $k : » . sajax_get_js_repr ( $v ) . «, » ;
else
$s .= » \» $esc_key \» : » . sajax_get_js_repr ( $v ) . «, » ;
>
if ( count ( $value ) )
$s = substr ( $s , 0 , — 2 ) ;
return $s . » >» ;
>
else <
$esc_val = sajax_esc ( $value ) ;
$s = «‘ $esc_val ‘» ;
return $s ;
>
>

Передать массив из php в js

array(2) < [0]=>object(stdClass)#243 (14) < ["id"]=>string(2) «19» [«id_user»]=> string(1) «1» [«name»]=> string(12) «Лагуна» [«stantion»]=> string(24) «Студенческая» [«adress»]=> string(98) «улица Приморская 189, Затока, Одесская область, Украина» [«type»]=> string(10) «Отель» [«saun»]=> string(12) «Басейн» [«bass»]=> string(10) «Сауна» [«a»]=> string(1) «0» [«b»]=> string(1) «0» [«c»]=> string(5) «wi-fi» [«d»]=> string(1) «0» [«desk»]=> string(84) » еа в аопщваопджіовапждо іваждп оівдапо іжвап» [«avatar»]=> string(37) «Florida-Hotel-Exteriror-Shot-Pool.jpg» > [1]=> object(stdClass)#244 (14) < ["id"]=>string(2) «17» [«id_user»]=> string(1) «1» [«name»]=> string(19) «Гранд Море» [«stantion»]=> string(24) «Студенческая» [«adress»]=> string(99) «улица Приморская 63д, Затока, Одесская область, Украина» [«type»]=> string(10) «Отель» [«saun»]=> string(12) «Басейн» [«bass»]=> string(10) «Сауна» [«a»]=> string(16) «Парковка» [«b»]=> string(16) «столовая» [«c»]=> string(5) «wi-fi» [«d»]=> string(29) «50 метров от моря» [«desk»]=> string(126) » вдларпділварп лдіварп лврп лоіврпл івплд і шХІВОАЖДЧИЛОАРИ ВАЛОЖДО» [«avatar»]=> string(23) «the-spectator-hotel.jpg» > >

если передать єто все просто как переменную, в js попадает только

Передача массивов из PHP в javascript

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

$seq = array("foo", "bar", "baz", "blong"); $json = json_encode($seq);
var name = php echo $json;?>;

Вот так все нормально. Далее эту переменную name я уже могу использовать в отдельном файле-яваскрипте. Проверяю обычным alert(name). Все передается и выводится. Но я не могу нормально получить уже нужный мне массив.

1 2 3 4 5 6 7 8
$beforeList = array(); $s = R::findAll( 'sites' ); //с базой связываюсь средствами redbeanphp foreach( $s as $addr ) { $beforeList[] = $addr->before; } $b = json_encode($beforeList);
var before = php echo $b;?>;

Еще в PHP echo $beforeList[0] или echo$beforeList[1]. выводит все как полагается, т.е. массив нормальный. Но в скрипте своем я уже ничего не получаю, alert(before) ничего не показывает(он даже не вызывает всплывающий диалог). Что я делаю не так? Как мне получить свой массив?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Передача массива из PHP в JavaScript
На сайте существует база данных MySQL доступ к которой осуществляется по скриптам языка PHP.

Передача переменных из PHP в Javascript
Добрый день. Пытаюсь сделать, чтобы "сайт" работал не со своими данными, а обращался к базе за.

Передача переменной из javascript в php
Привет всем!) мне нужно, чтобы при каждом нажатии кнопки добавлялось дополнительное текстовое поле.

Передача значения переменной из JavaScript в PHP
У меня есть 2 php-файла, вот коды: 1) <script type="text/javascript"> var variable =.

286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767

1 2 3 4
var number = ''; number= JSON.parse(number); alert(number[0]);

Регистрация: 08.05.2013
Сообщений: 140

var before = php echo $b;?>; before = JSON.parse(before);

Потом в файле-скрипте alert(before[0]); — и ничего не вызывается.

$json и так нормально передается и выводится в скрипте. Мне нужно мой $b передать и получить нормально.

Эксперт PHP

4885 / 3887 / 1611
Регистрация: 24.04.2014
Сообщений: 11,384

ЦитатаСообщение от Блеф Посмотреть сообщение

number= JSON.parse(number);

JSON это и так валидный javascript объект, нет смысла его переводить в строку и парсить.

el zurdo, нужно больше кода

286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767

el zurdo, выведите для начала переменную $b в скрипте. Все нормально? И как вы подключаете js скрипт?

Регистрация: 08.05.2013
Сообщений: 140

Попробовал вывести $b в .php но появляются такие косяки, как экранирование слэша, портит все. Я пытаюсь передать чисто $beforeList. Даже не знаю как правильней.

Сама идея такая — я хочу искать запчасти по партномеру на нескольких сайтах(это уже есть). Я вношу в базу две части адресной строки, между которыми стоит мой партномер(второго может не быть). Уже есть список имеющихся сайтов и нужно добавлять, если нужно, новые. Я считываю из базы список адресов, хочу передать в отдельный файл script.js, что бы потом он открывал мне вкладки с уже заданным параметром поиска. Вот как выглядит index.php:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
 require "db.php"; if(!R::testConnection()) { exit('Нет подключения к базе'); } $data = $_POST; $beforeList = array(); $afterList = array(); //тестовый массив, который нормально передается $seq = array("foo", "bar", "baz", "blong"); $json = json_encode($seq); $s = R::findAll( 'sites' ); foreach( $s as $addr ) { $beforeList[] = $addr->before; $afterList[] = $addr->after; echo $addr->before.$addr->after."
"
;// } if(isset($data['do_add'])){ $errors = array(); if(trim($data['name']) == ''){ $errors[] = 'Введите сайт'; } if(trim($data['before']) == ''){ $errors[] = 'Пустое первое поле -между-'; } if(R::count('sites', "name = ?", array($data['name'])) > 0){ $errors[] = 'Такой сайт уже добавлен'; } if(empty($errors)){ //записываем в базу $sites = R::dispense('sites'); $sites->name = $data['name']; $sites->before = $data['before']; $sites->after = $data['after']; R::store($sites); echo '
Сайт добавлен в список!

'
; }else{ echo '
'.array_shift($errors).'

'
; } } ?>

Part#:

Имя сайта(пример: www.site.ru): echo @$data['name'];?>">

Поиск между: echo @$data['before'];?>"> и echo @$data['after'];?>"> (второго может не быть)

И вот отдельный script.js:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
var searchText; var searchBtn; var beforeList; var afterList; function init(){ searchBtn = document.getElementById("searchBtn"); searchText = document.getElementById("searchtext"); searchBtn.addEventListener("click",search); } function search(){ var stext = searchText.value; //var result = name.split(','); //alert(result);//вот это выводит //alert(name); // и так выводит, только через запятую alert(before);//а это нет /*for(var i = 0; i < before.length; i++)  //window.open(before[i] + stext + after[i], '_blank'); >*/ } window.addEventListener("load", init);

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

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