Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите как передать массив из php в яваскрипт (https://javascript.ru/forum/misc/45576-podskazhite-kak-peredat-massiv-iz-php-v-yavaskript.html)

wadim 06.03.2014 15:50

Подскажите как передать массив из php в яваскрипт
 
Подскажите как передать массив из php в яваскрипт

// сервер
<?

$cwet[0]= 0;
$cwet[1]= 1;

$str = implode(",", $cwet);

?>


// клиент
<script>

<? include("SERVER.php"); ?>

str = <? echo $str; ?>;

document.write(str);

</script>

тут упрощенный вариант, выводим только строчку(str), но и она не правильно выводится, выводится только первый элемент массива.

А вообще надо чтоб элементы массива были не числами а строками.

deivan 06.03.2014 16:07

например, так:
<script>
var data = <?=json_encode($your_array);?>;

console.log(data);
</script>

ksa 06.03.2014 16:08

Цитата:

Сообщение от wadim
str = <? echo $str; ?>;
document.write(str);

Как вариант, делай нечто такое

<script>
var a = [1,2];
document.write(a);
</script>

danik.js 06.03.2014 16:11

Цитата:

Сообщение от wadim
str = <? echo $str; ?>;

В результате получится
str = 01;
То есть число "1", а не строка. Чтоб была строка - поставь ковычки. Но это так, для сведения. Тебе уже подсказали как правильно "передавать" массив.

kostyanet 06.03.2014 16:21

Сами вы кОвычка. :) После $str = implode(",", $cwet); должно быть 0,1, строка. ТС запятую где-то посеял.

kostyanet 06.03.2014 16:27

Цитата:

Сообщение от wadim
А вообще надо чтоб элементы массива были не числами а строками.

Это значит потребуется либо объект, либо массив объектов. Это по месту.

Ну или "двумерный" массив типа

var arr=[['one',3],['two',254],['three',254],['five',3]];


который в php делается как обычно

$arr[] = array($some_name, $some_number);

wadim 06.03.2014 16:34

Цитата:

Сообщение от deivan (Сообщение 301440)
например, так:
<script>
var data = <?=json_encode($your_array);?>;

console.log(data);
</script>

спасибо, а как теперь строку записать в массив, пробовал так

alert(data .split(','));

и так
cwet=[];
cwet= JSON.parse(data );

kostyanet 06.03.2014 16:41

Харе тупить. В js у вас сразу, то есть мгновенно появляется нормальный массив. Берите и юзайте его.

kostyanet 06.03.2014 16:42

Цитата:

Сообщение от wadim
cwet= JSON.parse(data );

Это если массив пришел как текст с сервера без идентификатора в уже загруженную страницу (аяксом).

Тогда вам его надо скомпилить в переменную.

В случае который вы процитировали уже все скомпилено на этапе загрузки страницы.

wadim 06.03.2014 16:48

Вроде разобрался, теперь нужно с текстового файла file.tx содержащего информацию:

'#00FF30' (уже записано в файле file.txt)


прочесть на сервере файл file.tx:

<?
$cwet= file('BAZA/cwetBaza.txt');
?>

Все читается и на клиент данные доходят, вот клиент

<canvas id="canvas" width="800" height="600"></canvas>
<script>
VarCanvas = document.getElementById("canvas");
ctx = VarCanvas .getContext('2d');

<? include("SERVER.php"); ?>
cwet= <?=json_encode($cwet);?>;
ctx.fillStyle = cwet[0];
ctx.fillRect(100, 0, 100, 100);
alert (cwet[0]);
</script>

Но квадрат не закрашивается, как сделать чтоб закрасился?

danik.js 06.03.2014 16:57

Цитата:

Сообщение от wadim
data - это строка

data - это строка в PHP. А на выходе будет просто JSON-нотация массива, которую скушает JS-парсер.

danik.js 06.03.2014 16:58

У тя на выходе будет data = [1,2] че те еще нужно????

kostyanet 06.03.2014 17:36

Цитата:

Сообщение от wadim
son_encode я так понял преобразует массив в строку, data - это строка, а где массив?

Преобразует массив в строку которую вы включаете в строку которая начинается <html> и которая попав в браузер компилируется в DOM со всеми скриптами (см выше).

Почему элементарное приходится объяснять? Вот кусок рабочего кода

echo '<script type="text/javascript">
			var row_id_name="',$tb->js_row_id_name,'";
			var datagrid_id="',$tb->table_id,'";
			var columns=',json_encode($js),';
			</script>';


Вот в браузере подключенный через link (наверно) скрипт юзает скрипт полученный с сервера вместе с хтемелей

var type = columns[field_index][1];


Еще раз скажете "нипонял" поставлю минус. :)

kostyanet 06.03.2014 17:42

Просто посмотрите в хтмле как получился ваш массив и сразу все станет понятно. Надеюсь. И вообще в процессе полезно заглядывать в хтмл, потому что пхпе положить на ошибки в хтмл, а браузеру в общем-то тоже. Только красный цвет в кодах покажет где накосячил ваш пхп.

kostyanet 06.03.2014 17:52

Вспомнил, была недавно похожая коллизия. Мне надо было записать уже отрендеренный урл в датасет ссылки на картинку - чтобы заголовок этой картинки сделать ссылкой на товар. Оказалось если просто всунуть <a href=""> в дата-сет, который сам начинается с " то барахло вылезает на страницу как халявный мозг из соломенной башки Страшилы.

Сперва я потратил время чтобы заменить все ' на \' и добился результата. Потом подумал что надо было попробовать http://ru2.php.net/htmlentities и попробовал. Хлам исчез. Было полез думать как теперь в JS из ентитек сделать нормальный html но недолез - щелкнул по ссылке и она открылась. Задумалсо: почему все эти &lt;a href=&quot;http:... попадая в innerHTML спана спокойно превращаются в ссылку.

title.innerHTML='Фото '+(index+1)+' из '+images_length+': '+this.dataset.link; // это оно


Так и не понял.


Часовой пояс GMT +3, время: 12:47.