Передача массива из PHP в JS.
Если передать переменную можно так
То как передать массив? Делаю так: $abcd = array('Массив 0', 1, 2); echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(\'' . $abcd . '\');">'; alert выдает: array Помогите сделать это правильно. |
json_encode()
|
И вообще ты все неправильно делаешь. Валидация относится не к форме, а к полям формы. Чтобы написать более-менее абстрактный валидатор, тебе надо в поля записывать правила их проверки. Сейчас это можно сделать через атрибут поля pattern. Более того, есть встроенная в браузеры валидация, но там как-то туманно все.
Потому что формой регистрации твоя задумка не ограничится. Где регистрация, там и смена пароля, редактирование профиля и все такое и повсюду нужна валидация. Ты на каждую форму будешь писать ее личный валидатор? |
Можно так:
$abcd = json_encode(array('Массив 0', 1, 2)); echo "<form action=\"$url\" method=\"post\" name=\"FormRegistration\" onsubmit='return RegistrationValid($abcd )'>"; onsubmit="function_name();" - одно выражение, значит и точка с запятой в общем то не нужна. Но если судить по передать переменную можно так, а теперь как впихнуть массив, то это наводит на мысль, что вы что-то не так делаете. |
Спасибо 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 - не помогает... |
Например на сайте может быть открыто одновременно считай сколько форм:
Профиль Перезвонить Фидбэк Быстрая покупка Оформление корзины И на все эти формы придется писать свою тряхомудию, и когда ты напишешь на две, уже увидишь, что коды одинаковые. Выдавишь их в функции для реюза и увидишь, что их надо собирать в объект. Короче жизнь все равно заставит. Так что лучше не жди ее пинков. ))) |
Цитата:
|
Просто у функции RegistrationValid должен быть параметр
function RegistrationValid(params){ /* Все что json_encode() отпостил, и будет в params*/ } PS Может быть будет не объект, а массив. Если ключей нет, то есть когда они континуально индексные, json_encode() кажется делает массив, почитай документацию. |
Цитата:
|
Цитата:
|
Если перенести рендер в браузер, то вообще ничего кроме массива не придется выводить ни в хтмл, ни в аякс.
|
warren buffet,
Еще раз послать тебя, где твое место? Нет? Тогда заткнись и не лей помои в теме, если не соображаешь о чем речью. Хватит пустых лозунгов. |
laimas, опять у тебя пукан бомбанул. )))
|
St., в html'е должно быть так (если я правильно помню как работает json_encode):
return RegistrationValid(['Массив 1', 2, 3]) или так return RegistrationValid({0:'Массив 1', 1:2, 2:3}) в общем примерно так Браузер компилит текст в объект сам, а если у тебя вот так return RegistrationValid('{0:'Массив 1', 1:2, 2:3}') то на входе функции строка и ее, еще надо отпарсить и превратить в объект. Зачем, если браузер все сам сделает, это же не аякс запрос, это html который парсится весь. |
warren buffet,
ты дебил. Ты вылил в теме кучу помоев. Ты просто паскудишь в темах, более от тебя ничего путнего. Натура у тебя такая быть затычкой в каждую задницу. А посему ты выглядишь полным придурком, хотя пытаешься позиционировать себя гением во всех без исключения вопросах. Чмо тупое. |
laimas, допросился
![]() |
Уважаемые!
Помогите передать массив. Как это сделать? "F12" - о каком отладчики идет речь? У меня Opera... Объесните! Кончайте ругаться... |
St., какой еще массив? Ты до сих пор не передал? Просто не делай лишнего. Тема давно уже про то, как у лалки пукан бомбанул. )))
|
Вот как сделай
echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(' . json_encode(array('Массив 0', 1, 2)) . ');">'; А на js просто берешь аргумент функции и все. |
Цитата:
Вся проблема в кавычках, когда вы пытаетесь "вогнать" строку в кавычки. И хотя то, что вы делаете, подсказывает, что делаете вы не то или не так, все же возникают иногда обстоятельства вставить в атрибут нечто, что порождает конфликты. Но в этом случае вставляемое можно закодировать, а на клиенте раскодировать перед использованием. Вот пример с тем же JSON: $a = rawurlencode(json_encode(['aaa', 'ddd'])); echo '<button onclick="alert(JSON.parse(decodeURIComponent(\''.$a.'\')))">GO</button>'; |
Уважаемые, спасибо.
Получилось вот так (php): $massiv = array('Текст 0', 'Текст 1', 234, 546); $encodemassiv = rawurlencode(json_encode($massiv)); echo '<form action="' . $url . '" method="post" name="FormRegistration" onsubmit="return RegistrationValid(\'' . $encodemassiv . '\');">'; Функция на js: function RegistrationValid(encodemassiv) { massivjs = JSON.parse(decodeURIComponent(encodemassiv)) alert(massivjs[0]); alert(massivjs[1]); alert(massivjs[2]); alert(massivjs[3]); } warren buffet. Цитата:
|
Цитата:
$json = json_encode(['Текст 0', 'Текст 1', 234, 546], JSON_UNESCAPED_UNICODE); //результат будет такой //["Текст 0","Текст 1",234,546] //вставляем как есть в вывод echo '<button onclick=\'myF(' . $json . ')\'>GO</button>'; Если это просмотреть в отладчике, то html будет таким <button onclick="myF(["Текст 0","Текст 1",234,546])">GO</button> Скопируйте в отладчике (в Опере выберите Инструменты разработчика) и получите <button onclick="myF(["Текст 0","Текст 1",234,546])">GO</button> Другими словами в нативном обработчике для передачи в функцию уже прописан массив, а в функции сразу обращаемся к его элементам. function myF(d) { alert(d[1]) } О новых возможностях форм можно почитать здесь и здесь. |
Цитата:
|
Цитата:
У меня все есть http://www.html5pattern.com/ Судя по тому, что тебе двое человек три страницы не смогли вталдычить самое элементарное, боюсь лучше не мучиться с паттернами и объектными валидаторами. Продолжай как смошешь. |
Цитата:
|
json_encode все сам делает, стопудово. Я передаю кириллицу им и любой юникод в жабу скрипучую. Само собой надо посылать заголовок насчет кодировки, но это как бы мастхав.
|
Цитата:
|
laimas.
В отладчике смотрел, получилось... Спасибо. П.С. Хух... pattern посмотрю завтра. |
St.,
обязательно нужно знать это, а знание формата данных, в данном случае JSON, передачи аргументов в js-функции (и не только в них), уже на этапе написания этого кода даст представление конечного результата. Не надо действовать наобум - я привел пример с кодированием, а вы его сразу ..., а ведь в данном случае это лишнее. ) Это нужно будет для очень "тяжелых" случаев. |
|
Цитата:
|
Часовой пояс GMT +3, время: 01:34. |