Форум русской поддержки Joomla!® CMS
23.06.2017, 17:40:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[Решено] ассоциативный массив для передачи в JS

 (Прочитано 50 раз)
0 Пользователей и 1 Гость смотрят эту тему.
larikan
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 7



« : 15.06.2017, 17:32:25 »

Помогите пожалуйста.....уже  весь день потерял на поиски  ответа  вроде на банальный вопрос...

создаю свой  тип поля для админки компонента и вот понадобилось для  обработчика  нажатия  кнопок  управления  организовать УНИВЕРСАЛЬНУЮ (это  важно!) передачу  параметров в виде  ассоциативного массива. Например
Код:
$arrayParam = array($param1 => $value1, $param2=>$arrayValues2);
такой  вариант позволяет просто добавлять в будущем  параметры для  передачи
так вот надо этот массив передать из кода PHP для  его распаковки и использования в JavaScript. И  вот тут оказалась засада (((
В инете  много  написано,  но там  варианты  для  срипта работающего прямо на странице где  можно вставлять HTML код напрямую в скрипт,
Код:
<div class="button_control" namebut-data="<?php echo json_encode($arrayParam); ?> ></div>
а  уменя  чисто скрипт PHP .... может я и не прав но я так  это понимаю.  
В PHP коде, точнее  в методе  getInput()  - формирования поля  для  админки такой  вариант не  катит там нужно сформировать данные  HTML
кода в виде значения переменной, то-есть не применишь echo json_encode($arrayParam).
если в  getInput() пишу  в лоб такой  код:
Код:
//...
function getInput()
{
 //......

$paramButtton['no'] = JText::_('JNO');
$paramButtton['yes'] = JText::_('JYES');

$html[] = '<div class="button_control"';
$html[] = ' namebut-data="'.json_encode($paramButtton).'"';
$html[] = '>';
//.....
return  implode('', $html);
}
//...
то в JavaScript (использую jQuery) при обработке клика - после извлечения значения атрибута  'namebut-data' получаю только первый сивол '{' JSON строки
а  в итоге  надо получить ассоциативнй  массив точнее  объект (я так понимаю нету   у  JavaScript ассоциативных массивов)
Код:
jQuery(document).ready(function(){
jQuery('.button_control').click(function(){
var namebut_array= jQuery(this).attr('namebut-data');
alert(namebut_array); //здесь вижу  только '{'
                var namesButt = {};
              
                jQuery.each(namebut_array, function(key, val) {  
namesButt [key] = val;
                      //namesButt['принятое _имя_ключа'] = 'принятое_значение ключа'
               }  
      });
});

 После обработки в JavScript должно быть аналогичное  массиву  в PHP но в JavScript:
  namesButt = {'no' : 'Да', 'yes': 'Нет'}
а  у меня  в лучшем  случае получается  строка  символов  похожая на массив в формате JSON ((( но не массив (объект)

при просмотре кода  страницы FireBag-ом  с моим полем вижу  такой  бред:
Код:
<div class="button_control_baseobj" );'=""  no":"\u041d\u0435\u0442","yes":"\u0414\u0430"}"="" namebut-data="{"  >
пробовал "менять  местами"  кавычки  двойные и одиночные  но  не  помогло хотя  чуть и изменилось ((
пробовал напрямую передать сроку  символов  визуаль нохожую на JSON строку - она принимается  но не обрабатывается  как  массив!
Код:
$paramButttonJSON= "{'no':'".JText::_('JNO')."','yes':'".JText::_('JYES')."'}";
$html[] = '<div class="button_control"';
$html[] = ' namebut-data="'.paramButttonJSON.'"';
$html[] = '>';

Нутром  чую  что проблема очевидно  мелкая, но  уже  мозг кипит.....а не получается Shocked

Подскажите  пожалуйста где  я ошибся и  как  надо передавать  подобный массив и потом его извлекать в данном случае
« Последнее редактирование: 15.06.2017, 18:26:49 от b2z » Записан
Тренд
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Сообщений: 59


« Ответ #1 : 15.06.2017, 17:44:36 »

Строка
Код:
$html[] = ' namebut-data="'.json_encode($paramButtton).'"';
Функция json_encode всегда выводит строку внутри которых куча двойных кавычек. Представьте, что у вас получится если вы эту строку вставляете внутрь двойных кавычек.
Посмотрите что храниться в переменной $html[1]
Записан
larikan
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 7



« Ответ #2 : 15.06.2017, 17:50:59 »

Строка
Код:
$html[] = ' namebut-data="'.json_encode($paramButtton).'"';
Функция json_encode всегда выводит строку внутри которых куча двойных кавычек. Представьте, что у вас получится если вы эту строку вставляете внутрь двойных кавычек.
Посмотрите что храниться в переменной $html[1]

Да  я  обратил на это внимание  и попробовал напрямую  передавать результат в  виде  строки  {'no' : 'Да', 'yes': 'Нет'}  с другим  расположение кавычек  (заменил двойные на одиночные)... HTML код  стал "красивым"  но  моя строка  почему-то не принимается  как  закодированный  в JSON массив ((

вот я  слепота......понял Вашу мысль  изменил кавычки в  строке
$html[] = " namebut-data=' ".json_encode($butconfirm)." ' ";
HTML код стал красивым )) но дальше  всеравно воспринимается  как  строка...(((
может я неправильноее  декодирую в массив?
« Последнее редактирование: 15.06.2017, 17:59:31 от larikan » Записан
Тренд
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Сообщений: 59


« Ответ #3 : 15.06.2017, 17:56:09 »

нет, стандарт JSON требует именно двойные кавычки, потому другое написание не будет восприниматься как JSON.
В вашем варианте попробуйте сделать по другому
Код:
$html[] = "namebut-data='".json_encode($paramButtton)."'";
Записан
larikan
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 7



« Ответ #4 : 15.06.2017, 18:17:38 »

Строка
Код:
$html[] = ' namebut-data="'.json_encode($paramButtton).'"';
Функция json_encode всегда выводит строку внутри которых куча двойных кавычек. Представьте, что у вас получится если вы эту строку вставляете внутрь двойных кавычек.
Посмотрите что храниться в переменной $html[1]

Тренд - вы  спасли меня  от вывиха  ума!

Ведь  чуялл что все гениальное  просто...все  дело в замыленности взгляда......
в  ходе  проб и ошибок стер  одну  строку кода Java! собственно которая и делала преобразование!
после  исправления  подсказанного <Тренд> входная  строка принялась но не конвертировалась  потомучто не было  этой  строки
вот она (а  точнее  там  блок  подмены  значения  переменной.....блинннн   меня....)
Код:
var namebut = JSON.parse(namebut_array); var namebut_array = {};  namebut_array = namebut;
 

вообщем  все  заработало!  изначально все  дело было  в  кавычках   двойных и одиночных...

ГРОМАДНОЕ СПАСИБО!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet