Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.01.2014, 01:25
Интересующийся
Отправить личное сообщение для TITO Посмотреть профиль Найти все сообщения от TITO
 
Регистрация: 05.01.2014
Сообщений: 10

Передача данных PHP -> JS
Здравствуйте, уважаемые. Я не очень хорошо владею тонкостями JS поэтому прошу помощи в отладке взаимодействия пары PHP - JS.

Задача у меня отрисовать датапикер в зависимости от радиокнопки на который кликнет пользователь (доступные даты активировать/недоступные деактивировать).
На странице имеется к примеру две радиокнопки, на первую кликаешь активны одни даты, на другую соответствено датапикер перегружается и становятся активны для выбора другие даты.

На сервере я подготавливаю ассоциативный массив данных типа
$combo_html=array_combine($attr_html, $date_html); в котором ключи это id радиокнопки(пример jshop_attr_id11), значения соответственно массив дат(пример ["4-1-2014","5-1-2014"] после json).
Затем отдаю его в JS через json_encode
var tmp = '.json_encode ($combo_html).';
На клиенте я уже соответственно работаю с ассоциативным массивом(объектом) в JS
var tmp = {"\"jshop_attr_id11\"":["1-1-2014","2-1-2014","3-1-2014","4-1-2014","16-1-2014","17-1-2014","16-1-2014","17-1-2014","5-2-2014","6-2-2014","7-2-2014"],"\"jshop_attr_id12\"":["4-1-2014","5-1-2014","7-1-2014","8-1-2014","18-1-2014","19-1-2014"]};
Вот я никак не могу придумать как оптимальнее это все дело реализовать на JS.
В частности я никак не соображу как мне обратиться к ключу в массиве tmp, мне нужна функция аналог array_keys из PHP.
Если же я из PHP отдаю все значения ключей в отдельную переменную например
var tstel = '.$attr_id_0.';
alert(tmp["tstel"]);

То я уже не могу получить значения из массива в JS. В коде страницы в таком случае вижу
var tstel="jshop_attr_id11";
alert(tmp["tstel"]);

На алерт отзывается, но сообщает undefined, что то я видимо не так делаю, но никак не пойму, что именно.
Всем откликнувшимся заранее спасибо, если кто то решал подобную задачу буду рад если поделитесь советом или реализацией.
Ответить с цитированием
  #2 (permalink)  
Старый 08.01.2014, 01:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от TITO
alert(tmp["tstel"]);
кавычки уберите
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2014, 01:52
Интересующийся
Отправить личное сообщение для TITO Посмотреть профиль Найти все сообщения от TITO
 
Регистрация: 05.01.2014
Сообщений: 10

Спасибо за ответ. Я уже сам решил проблему, если вдруг кто то с подобным столкнется то можно использовать
var ID_array = new Array();
var Date_array = new Array();
for (var key in tmp) {
	ID_array.push(key);
        Date_array.push(tmp[key]);
}
alert(ID_array.length);
alert(Date_array.length);

Источник: http://stackoverflow.com/questions/1...alues-as-array
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2014, 19:32
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Там же есть ссылка на годную статью (в негодной).

var keys = Object.keys(obj);


Однако я не понял за каким тут вообще какой-то ассоциативный, если всего два массива. Сделайте 2 переменные и отпостите в хтмл 2 массива.

Кроме того json_encode имеет кучу опций. Вы лично какую юзали?

И последнее. Почему у вас те самые ключи в кавычках оказались?
Ответить с цитированием
  #5 (permalink)  
Старый 08.01.2014, 19:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Из своих мучений. В js массив тоже объект, но хитрозадый. Изображает из себя настоящий массив. Что на фоне "ассоциативных" объектов выглядит ну вообще бредом. То есть выражение arr[5]=1; даст массив из 6 элементов 5 первых из которых будут null и в дампе и в цикле. То есть перебирать придется весь миллион, если код где-то впиндюрил arr[929283383]="мама, роди меня взад";
Ответить с цитированием
  #6 (permalink)  
Старый 09.01.2014, 12:06
Интересующийся
Отправить личное сообщение для TITO Посмотреть профиль Найти все сообщения от TITO
 
Регистрация: 05.01.2014
Сообщений: 10

Я использую массив для того, что не знаю сколько кнопок может быть на странице, и сколько дат соответствующих этим кнопкам, кнопок может быть от 0 до N, и дат соответственно для каждой кнопки от 0 до M.
Лично я отдаю с опциями по умолчанию
var tmp = '.json_encode ($combo_html).';
Ключи в кавычках потому что я так в php криво отпарсил substring, видимо поэтому и не отрабатывало, спасибо, что указали на ошибку.

Последний раз редактировалось TITO, 09.01.2014 в 12:10.
Ответить с цитированием
  #7 (permalink)  
Старый 09.01.2014, 22:34
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Да хоть стопицот будет кнопок, любая из них найдет свою переменную по собственному имени например.

У кнопки (this) имя jshop_attr_id100500, у переменной имя jshop_attr_id100500.

var arr = window[this.name];
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных из Uploadify в php frutality jQuery 9 22.04.2016 03:54
Получить массив из php d js freelancerphpcss jQuery 3 02.07.2013 15:29
Передача смешанного массива из php в js Daiver Серверные языки и технологии 13 31.05.2013 10:11
Переменная php -> параметр функции JS allie Общие вопросы Javascript 3 30.09.2011 10:11
JS + php возврат информации Phantom Общие вопросы Javascript 1 28.09.2011 17:53