How to pass an array using PHP & Ajax to Javascript?
Apologies if this explanation isn’t clear, it’s hard for me to understand too. How can I use PHP & Ajax to send an array to Javascript? I’m using Ajax to get an array of photos, which I’m then looking to append to an empty <div> on my page.
The jQuery looks as follows:
And the PHP function getPhotos looks like this:
If I simply echo $photos; the data is sent to the success callback, but it doesn’t appear to be in a usable format.
If I do a var_dump($photos) in PHP, the result looks something like:
I’ve tried various combinations of json_encode and the like but really I am guessing and not sure of the theory behind it. What’s the best way to pass data from PHP to Javascript in this context?
5 Answers 5
On the PHP side, you’ll be wanting to print:
Another thing you might try in order to better encapsulate your code, and as an example of further JSON gooodness, would be:
Then on the server, you’d access these with:
![]()
I made an array $result in PHP and at the end of request.
and in JS $.post handler function :
where k is key value in associative array.
json_encode is definitely the way to go. jQuery even has built-in support for parsing JSON. You could use e.g.
return the json itself and then construct the array in js by looping over the json as follows:
Or you can simply work with the json itself any reason for needing the array?
something like json[0] or json[1] etc.
json_encode rulez when you need this stuff.
I recently learned this cool thing too! Here’s how you do it:
This is optional, if you want to do it, you don’t have to, but in my MVC system, I tend to write this way. So first I make an ajax request (prototype), to a script, that later calls this function jsonResponse I mentioned earlier.
Как передать массив из php в javascript
В этом разделе помещены уроки по 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
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.
Агент
PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.
Преобразование массива php в Javascript
Как преобразовать массив PHP в такой формат:
Array (
[0] => 001-1234567
[1] => 1234567
[2] => 12345678
[3] => 12345678
[4] => 12345678
[5] => AP1W3242
[6] => AP7X1234
[7] => AS1234
[8] => MH9Z2324
[9] => MX1234
[10] => TN1A3242
[11] => ZZ1234
)
в массив Javascript в формате, как показано ниже:
var cities = [
«Aberdeen»,
«Ada»,
«Adamsville»,
«Addyston»,
«Adelphi»,
«Adena»,
«Adrian»,
«Akron»,
«Albany»
];
Ответ 1
Если у вас нет PHP 5.2, вы можете использовать что-то вроде этого:
function js_str($s) <
return ‘»‘ . addcslashes($s, «\0..\37\»\\») . ‘»‘;
>
function js_array($array) <
$temp = array_map(‘js_str’, $array);
return ‘[‘ . implode(‘,’, $temp) . ‘]’;
>
echo ‘var cities = ‘, js_array($php_cities_array), ‘;’;
Ответ 2
Я собираюсь предположить, что два массива, которые вы указали для PHP и JS, не связаны и они просто примеры того, как массивы выглядят на двух языках. Ясно, что вы не сможете преобразовать эти последовательности букв и цифр в названия городов.
PHP предоставляет функцию для преобразования PHP массивов в Javascript код: json_encode() (технически это формат JSON; JSON означает нотацию объектов JavaScript) .
Используйте это так:
<script type=’text/javascript’>
<?php
$php_array = array(‘abc’,’def’,’ghi’);
$js_array = json_encode($php_array);
echo «var javascript_array = «. $js_array . «;\n»;
?>
</script>
Обратите внимание, что json_encode() доступна только в PHP 5.2 и выше, поэтому, если вы используете старую версию, вам нужно будет ознакомиться с руководством по вашей версии PHP.
Ответ 3
В ы можете преобразовать массивы php в javascript с помощью функции json_encode php:
<?php $phpArray = array(
0 => 001-1234567,
1 => 1234567,
2 => 12345678,
3 => 12345678,
4 => 12345678,
5 => ‘AP1W3242’,
6 => ‘AP7X1234’,
7 => ‘AS1234’,
8 => ‘MH9Z2324’,
9 => ‘MX1234’,
10 => ‘TN1A3242’,
11 => ‘ZZ1234’
)
?>
<script type=»text/javascript»>
var jArray = <?php echo json_encode($phpArray ); ?>;
for(var i=0;i<12;i++) <
alert(jArray[i]);
>
</script>
Ответ 4
Для многомерного массива в PHP 4 вы можете использовать следующий код:
function js_str($s) <
return ‘»‘.addcslashes($s, «\0..\37\»\\»).'»‘;
>
function js_array($array, $keys_array) <
foreach ($array as $key => $value) <
$new_keys_array = $keys_array;
$new_keys_array[] = $key;
if(is_array($value)) <
echo ‘javascript_array’;
foreach($new_keys_array as $key) <
echo ‘[«‘.$key.'»]’;
>
echo ‘ = new Array();’;
js_array($value, $new_keys_array);
> else <
echo ‘javascript_array’;
foreach($new_keys_array as $key) <
echo ‘[«‘.$key.'»]’;
>
echo ‘ = ‘.js_str($value).»;»;
>
>
>
echo ‘var javascript_array = new Array();’;
js_array($php_array, array());
Ответ 5
Это моя функция. JavaScript должен быть под PHP, иначе используйте SESSION.
<?php
$phpArray=array(1,2,3,4,5,6);
?>
<div style=»width:300px;»></div>
<script type=»text/javascript»>
var jsArray = new Array();
<?php
$numArray=count($phpArray);
for($i=0;$i<$numArray;$i++) <
echo «jsArray[$i] = «. $phpArray[$i] . «;\n»;
>
?>
$(«#arrayCon»).text(jsArray[1]);
</script>
Последний ряд может быть . text(jsArray); и будет показан результат «1,2,3,4,5,6».
Ответ 6
Я использую поддельный массив php
<?php
// создайте свой массив следующим образом
$php_array = [«The»,»quick»,»brown»,»fox»,»jumps»,»over»,»the»,»lazy»,»dog»];
// сделайте это следующим образом (простая переменная, но с разделителем)
$php_fake_array = «The,quick,brown,fox,jumps,over,the,lazy,dog»;
?>
<script type=»text/javascript»>
// используйте тот же разделитель для функции JS split()
js_array = ‘<?php echo $php_fake_array; ?>’.split(‘,’);
</script>
если ваш массив заранее неизвестен:
<?php
$php_array = file(‘my_file.txt’);
$php_fake_array = «»;
// преобразуйте ваш массив с помощью конкатен а ции следующим образом
foreach ($php_array as $cell) <
// поскольку этот массив неизвестен, используйте умный разделитель
$php_fake_array .= $cell.». «;
>
?>
<script type=»text/javascript»>
// используйте тот же разделитель для функции JS split()
js_array = ‘<?php echo $php_fake_array; ?>’.split(‘. ‘);
</script>
Ответ 7
У меня была такая же проблема, и вот как я это сделал :
/*PHP FILE*/
<?php
$data = file_get_contents(‘http://yourrssdomain.com/rss’);
$data = simplexml_load_string($data);
$articles = array();
foreach($data->channel->item as $item) <
$articles[] = array(
‘title’ => (string)$item->title,
‘description’ => (string)$item ->description,
‘link’ => (string)$item ->link,
‘guid’ => (string)$item ->guid,
‘pubdate’ => (string)$item ->pubDate,
‘category’ => (string)$item ->category,
);
>
// ЕСЛИ ВЫ РАСПЕЧАТАЕТЕ МАССИВ СТАТЕЙ, ТО ПОЛУЧИТЕ ТОТ ЖЕ МАССИВ, ЧТО И СЕЙЧАС, ПОЭТОМУ Я СОЗДАЮ ВЫХОДНУЮ СТРОКУ И С ПОМОЩЬЮ ЦИКЛА FOR ДОБАВЛЯЮ НЕСКОЛЬКО СИМВОЛОВ ДЛЯ ПОСЛЕДУЮЩЕГО РАЗДЕЛЕНИЯ С ПОМОЩЬЮ JAVASCRIPT
$output=»»;
for($i = 0; $i < sizeof($articles); $i++) <
//# элементы
//| атрибуты
if($i != 0) $output.=»#»;
// ЕСЛИ ЭТО НЕ ПЕРВЫЙ ЭЛЕМЕНТ, ДОБАВЬТЕ ‘#’ ДЛЯ РАЗДЕЛЕНИЯ КАЖДОГО ЭЛЕМЕНТА, А ЗАТЕМ ‘|’ ДЛЯ РАЗДЕЛЕНИЯ КАЖДОГО АТРИБУТА ЭЛЕМЕНТА
$output.=$articles[$i][‘title’].»|»;
$output.=$articles[$i][‘description’].»|»;
$output.=$articles[$i][‘link’].»|»;
$output.=$articles[$i][‘guid’].»|»;
$output.=$articles[$i][‘pubdate’].»|»;
$output.=$articles[$i][‘category’];
>
echo $output;
?>
/*AJAX */
$(document).ready(function(e) <
var prodlist= [];
var attrlist= [];
$.ajax( <
type: «get»,
url: «php/fromupnorthrss.php»,
data:
>).done(function(data) <
prodlist= data.split(‘#’);
for(var i = 0; i < prodlist.length; i++) <
attrlist= prodlist[i].split(‘|’);
alert(attrlist[0]); /// ТЕПЕРЬ МОЖНО ДОБРАТЬСЯ ДО КАЖДОГО ЭЛЕМЕНТА
>);
>);
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Как передать из php в javascript массив?
Каким образом можно передать php массив в javascript?
В коде на php имеем:
в коде javascript принимаем:
Пробовал с помощью json_encode, но таким образом, т.к. в массиве есть текст, вместо него передается абракадабра типа u. и т.д.
- Вопрос задан более трёх лет назад
- 27763 просмотра
- Вконтакте

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










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



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




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



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



- Вконтакте



Функция 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.