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

  • 4 Ответов
  • 89 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

larikan

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

создаю свой  тип поля для админки компонента и вот понадобилось для  обработчика  нажатия  кнопок  управления  организовать УНИВЕРСАЛЬНУЮ (это  важно!) передачу  параметров в виде  ассоциативного массива. Например
Код
$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[] = '>';

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

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

*

Тренд

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

*

larikan

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

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

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

*

Тренд

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

*

larikan

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

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

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

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

ГРОМАДНОЕ СПАСИБО!