30.09.2016, 10:38
|
Аспирант
|
|
Регистрация: 15.04.2016
Сообщений: 53
|
|
Передача массива из PHP в JS.
Если передать переменную можно так
То как передать массив?
Делаю так:
$abcd = array('Массив 0', 1, 2);
echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(\'' . $abcd . '\');">';
alert выдает: array
Помогите сделать это правильно.
|
|
30.09.2016, 10:58
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
json_encode()
|
|
30.09.2016, 11:03
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
И вообще ты все неправильно делаешь. Валидация относится не к форме, а к полям формы. Чтобы написать более-менее абстрактный валидатор, тебе надо в поля записывать правила их проверки. Сейчас это можно сделать через атрибут поля pattern. Более того, есть встроенная в браузеры валидация, но там как-то туманно все.
Потому что формой регистрации твоя задумка не ограничится. Где регистрация, там и смена пароля, редактирование профиля и все такое и повсюду нужна валидация. Ты на каждую форму будешь писать ее личный валидатор?
|
|
30.09.2016, 11:04
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Можно так:
$abcd = json_encode(array('Массив 0', 1, 2));
echo "<form action=\"$url\" method=\"post\" name=\"FormRegistration\" onsubmit='return RegistrationValid($abcd )'>";
onsubmit="function_name() ;" - одно выражение, значит и точка с запятой в общем то не нужна.
Но если судить по передать переменную можно так, а теперь как впихнуть массив, то это наводит на мысль, что вы что-то не так делаете.
|
|
30.09.2016, 11:08
|
Аспирант
|
|
Регистрация: 15.04.2016
Сообщений: 53
|
|
Спасибо 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 - не помогает...
Последний раз редактировалось St., 30.09.2016 в 11:11.
|
|
30.09.2016, 11:09
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Например на сайте может быть открыто одновременно считай сколько форм:
Профиль
Перезвонить
Фидбэк
Быстрая покупка
Оформление корзины
И на все эти формы придется писать свою тряхомудию, и когда ты напишешь на две, уже увидишь, что коды одинаковые. Выдавишь их в функции для реюза и увидишь, что их надо собирать в объект. Короче жизнь все равно заставит. Так что лучше не жди ее пинков. )))
|
|
30.09.2016, 11:11
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от St.
|
В js делаю так:
|
В js уже объект, браузер его сам отпарсил и скомпилил, поскольку текст в хтмле.
|
|
30.09.2016, 11:12
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Просто у функции RegistrationValid должен быть параметр
function RegistrationValid(params){
/* Все что json_encode() отпостил, и будет в params*/
}
PS Может быть будет не объект, а массив. Если ключей нет, то есть когда они континуально индексные, json_encode() кажется делает массив, почитай документацию.
|
|
30.09.2016, 11:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от St.
|
А как передать такой массив?
$abcd = array('1','2','3');
|
Я вам для чего писал пример? Обратите внимание на кавычки в строке. Почему так? Все потому, что в JSON строки заключаются в двойные кавычки. То что я написал даже не потребует JSON.parse на клиенте. А почему - ответ можно найти если щелкнуть F12 и заглянуть в отладчик.
|
|
30.09.2016, 11:19
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
а теперь как впихнуть массив
|
А как ты сделаешь 5 объектов для 5 форм без передачи параметров в объекты, хотя бы таких как id формы, редактируемая она или нет, плавает или пофиксена, нужно ли напоминать о несохраненных данных или пофигу? Откуда взять все эти параметры? В атрибуты распихивать? Ну распихивай.
|
|
|
|