Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача массива из PHP в JS. (https://javascript.ru/forum/misc/65154-peredacha-massiva-iz-php-v-js.html)

St. 30.09.2016 10:38

Передача массива из PHP в JS.
 
Если передать переменную можно так
То как передать массив?

Делаю так:
$abcd = array('Массив 0', 1, 2);
echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(\'' . $abcd . '\');">';

alert выдает: array

Помогите сделать это правильно.

warren buffet 30.09.2016 10:58

json_encode()

warren buffet 30.09.2016 11:03

И вообще ты все неправильно делаешь. Валидация относится не к форме, а к полям формы. Чтобы написать более-менее абстрактный валидатор, тебе надо в поля записывать правила их проверки. Сейчас это можно сделать через атрибут поля pattern. Более того, есть встроенная в браузеры валидация, но там как-то туманно все.

Потому что формой регистрации твоя задумка не ограничится. Где регистрация, там и смена пароля, редактирование профиля и все такое и повсюду нужна валидация. Ты на каждую форму будешь писать ее личный валидатор?

laimas 30.09.2016 11:04

Можно так:
$abcd = json_encode(array('Массив 0', 1, 2));
echo "<form action=\"$url\" method=\"post\" name=\"FormRegistration\" onsubmit='return RegistrationValid($abcd )'>";


onsubmit="function_name();" - одно выражение, значит и точка с запятой в общем то не нужна.

Но если судить по передать переменную можно так, а теперь как впихнуть массив, то это наводит на мысль, что вы что-то не так делаете.

St. 30.09.2016 11:08

Спасибо warren buffet.

Делаю так:
$abcd = array(1,2,3);
$abcd = json_encode($abcd);
echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(\'' . $abcd . '\');">';


В js делаю так:
massiv = JSON.parse(abcd);
alert(massiv[0]);

Работает.

А как передать такой массив?
$abcd = array('1','2','3');


addslashes - не помогает...

warren buffet 30.09.2016 11:09

Например на сайте может быть открыто одновременно считай сколько форм:

Профиль
Перезвонить
Фидбэк
Быстрая покупка
Оформление корзины

И на все эти формы придется писать свою тряхомудию, и когда ты напишешь на две, уже увидишь, что коды одинаковые. Выдавишь их в функции для реюза и увидишь, что их надо собирать в объект. Короче жизнь все равно заставит. Так что лучше не жди ее пинков. )))

warren buffet 30.09.2016 11:11

Цитата:

Сообщение от St.
В js делаю так:

В js уже объект, браузер его сам отпарсил и скомпилил, поскольку текст в хтмле.

warren buffet 30.09.2016 11:12

Просто у функции RegistrationValid должен быть параметр

function RegistrationValid(params){

/* Все что json_encode() отпостил, и будет в params*/

}


PS Может быть будет не объект, а массив. Если ключей нет, то есть когда они континуально индексные, json_encode() кажется делает массив, почитай документацию.

laimas 30.09.2016 11:14

Цитата:

Сообщение от St.
А как передать такой массив?
$abcd = array('1','2','3');

Я вам для чего писал пример? Обратите внимание на кавычки в строке. Почему так? Все потому, что в JSON строки заключаются в двойные кавычки. То что я написал даже не потребует JSON.parse на клиенте. А почему - ответ можно найти если щелкнуть F12 и заглянуть в отладчик.

warren buffet 30.09.2016 11:19

Цитата:

Сообщение от laimas
а теперь как впихнуть массив

А как ты сделаешь 5 объектов для 5 форм без передачи параметров в объекты, хотя бы таких как id формы, редактируемая она или нет, плавает или пофиксена, нужно ли напоминать о несохраненных данных или пофигу? Откуда взять все эти параметры? В атрибуты распихивать? Ну распихивай.


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