Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передача данных PHP -> JS (https://javascript.ru/forum/events/44126-peredacha-dannykh-php-js.html)

TITO 08.01.2014 01:25

Передача данных 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, что то я видимо не так делаю, но никак не пойму, что именно.
Всем откликнувшимся заранее спасибо, если кто то решал подобную задачу буду рад если поделитесь советом или реализацией.

рони 08.01.2014 01:29

Цитата:

Сообщение от TITO
alert(tmp["tstel"]);

кавычки уберите

TITO 08.01.2014 01:52

Спасибо за ответ. Я уже сам решил проблему, если вдруг кто то с подобным столкнется то можно использовать
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

kostyanet 08.01.2014 19:32

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

var keys = Object.keys(obj);


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

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

И последнее. Почему у вас те самые ключи в кавычках оказались?

kostyanet 08.01.2014 19:38

Из своих мучений. В js массив тоже объект, но хитрозадый. Изображает из себя настоящий массив. Что на фоне "ассоциативных" объектов выглядит ну вообще бредом. То есть выражение arr[5]=1; даст массив из 6 элементов 5 первых из которых будут null и в дампе и в цикле. То есть перебирать придется весь миллион, если код где-то впиндюрил arr[929283383]="мама, роди меня взад";

TITO 09.01.2014 12:06

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

kostyanet 09.01.2014 22:34

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

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

var arr = window[this.name];


Часовой пояс GMT +3, время: 23:13.