Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2015, 15:52
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

Как правильно прописать массив?
Имеется следующий код:
// вывод детей в радиогруппу
	/*********************************************/
	// Мы должны произвести запрос детей выбранного узла
	function child_radion(uzl, elem, num){
		$.post("htmls/param.php",
			{"code": uzl },
			function(data){
				obj = JSON.parse(data);
				// Перебираем полученный массив
				var str_elem="";
				var chek="";
				for (var i in obj){
					 // ********************************************
					 //!!!!!!!!!!! костыль!!!!!!!!!!!!!!!!!!!!!!!!!!
					 // ********************************************
					 if (i==num){
					 	chek='checked="checked"';
					 } else {
					 	chek='';
					 }
					 // ********************************************
					 // ********************************************
					 // ********************************************
					 str_elem+='<label>\
								<input \
								type="radio" \
								name="otdl_type_'+uzl+'" '+chek+'\
								value="'+obj[i]["value"]+'">'+obj[i]["name"]+'</label>';
				// alert(str_elem);
				elem.html(str_elem);
				com_sale();
				}
			});
		}


Правильного файла param.php у меня нет, но на рабочей версии скрипта в этом файле я вижу следующее:
{
"0":{"id":"57","name":"Имя1","value":"100"} ,
"1":{"id":"56","name":"Имя2","value":"97"}
и т. д.
}
Как правильно прописать массив чтоб заработала функция.
(при отмеченном чекбоксе открывается блок с радиокнопками)
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2015, 16:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от dee3000
Как правильно прописать массив чтоб заработала функция.
В смысле на сервере? Вот такой:
$a = array(
    array("id"=>57, "name"=>"Имя1", "value"=>100),
    array("id"=>56, "name"=>"Имя2", "value"=>97),
    .... и т.д.
);
//отдается клиенту:
exit(json_encode($a, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK));
//константы, если доступны:
//JSON_UNESCAPED_UNICODE - не кодировать национальные символы в unicode
//JSON_NUMERIC_CHECK - кодировать числа как числа, а не строки, то есть не "100", а 100 получит клиент
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2015, 18:07
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

Пожалуйста простите мне мою тупость!!!
С Вашим кодом к сожалению не работает.
Тоесть я создаю файл param.php вставляю Ваш код с ним не работает.
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2015, 18:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

dee3000,
что у вас в data -- может ничего и парсить ненадо
obj = JSON.parse(data);
obj = data;
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2015, 18:40
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

obj = data;
попробовал, выводит не скончаемый какой то массив, и не там где нужно.
Объясню пожалуй подробнее
Это оконный калькулятор как на этом сайте: http://www.xn--b1agpeoggke8j.xn--p1ai/tseny/calculator
при выборе чекбокса например ламинация открываются дочерние пункты
А вот что у меня: http://modus-stroi.ru/modusnew/calkulator.php
все работает кроме этого.
скрипт скачаный но он не полный, все что мог допилил, но я не знаю совсем js? по этому прошу помощи.
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2015, 18:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от dee3000
С Вашим кодом к сожалению не работает.
Я собственно и не писал кода, вопрос был о структуре массива, вот такая какая показана. Если же код, то:

а) у вас показан объект, а это будет в том случае, если данные этого массива на серверной стороне тоже являются объектом, или же при json-кодировнии добавляется параметр указывающий кодировать как объект.

б) не обязательно с объектом работать, можно и с массивом объектов, то есть клиент получит не:
{
"0":{"id":"57","name":"Имя1","value":"100"} ,
"1":{"id":"56","name":"Имя2","value":"97"}
и т. д.
}

а
[
{"id":"57","name":"Имя1","value":"100"} ,
{"id":"56","name":"Имя2","value":"97"}
и т. д.
]

и разобрать это на клиенте так:
while(o = obj.pop()) {
    //и так получать
    o.id //значение ключа id    
    o.name //значение ключа name
    o.value //значение ключа value
}

Нужно только иметь ввиду, что обход массива будет происходить с конца его.
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2015, 19:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

dee3000,
сложно вам помочь -- много лишнего грузится , пара тройка ошибок уже в консоли сидит ... ненадо грузить jquery несколько раз -- достаточно одной загрузки.
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2015, 19:10
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

Огромное спасибо Вам за помощь, но я должен был сразу сказать что я полный ноль в js и сейчас совсем не понимаю даже о чем речь.
Но да бог с ним, обойдусь без выпадающих радиокнопок, раз все настолько сложно. Просто добавлю чекбоксов )))
+ Вам отправил в карму.
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2015, 19:11
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

ошибки конечно исправлю, сайт еще только начат, сейчас вот прикручиваю это скрипт калькулятора.
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2015, 20:58
Интересующийся
Отправить личное сообщение для dee3000 Посмотреть профиль Найти все сообщения от dee3000
 
Регистрация: 12.06.2015
Сообщений: 23

Вот более полная часть кода, может кто посмотрит?
// выбор типа дома
	$("#type_home_select li").click(function(){
		// Определяем узел по которому искать детей
		var uzl=$(this).find("a").attr("data-item");
		// Включаем наши откосы
		$("#otdl_vnutr").removeAttr("disabled");
		$("#otdl_vnesh").removeAttr("disabled");
		// Зачищаем отделку
		$("#itdl_otkos .otdl").removeAttr('checked');
		$(".type_otkos").html("");
		// Мы должны произвести запрос детей выбранного узла
		$.post("htmls/param.php",
		  {"code": uzl },
		  function(data){
		  	obj = JSON.parse(data);
		  	function go_elem(elem, elem_l, obj_elem){
			  	elem.val(obj_elem["value"]);
			  	elem_l.html(obj_elem["name"]);
			  	elem.attr("data-item", obj_elem["id"]);		  	
		  	}
		  	go_elem($("#otdl_vnutr"), $("#otdl_vnutr_label"),obj[0] );
		  	go_elem($("#otdl_vnesh"), $("#otdl_vnesh_label"),obj[1] );
		  	com_sale();
		  });
 

		// alert(uzl);
	});

	//***************************************************
	// Обработчик выбора отделки нужного окна 
	//***************************************************
	$("#win_dop .otdl").click(function(){
		com_sale();
	})


	//***************************************************
	// Обработчик выбора отделки нужного окна 
	//***************************************************
	$("#itdl_otkos .otdl").click(function(){
		// Определяем узел по которому искать детей
		var uzl=$(this).attr("data-item");
		// alert(uzl);
		var cost=$(this).val();
		var state=$(this).prop("checked");
		var elem_up=$(this).parent().parent().find(".type_otkos");
		if (state && uzl!=0){
			// Наполняем блок детьми в виде радиогруппы
			child_radion(uzl, elem_up, 1);
		} else {
			elem_up.html("");
			com_sale();
		}
	})

		/*********************************************/
	// вывод детей в радиогруппу
	/*********************************************/
	// Мы должны произвести запрос детей выбранного узла
	function child_radion(uzl, elem, num){
		$.post("htmls/param.php",
			{"code": uzl },
			function(data){
				obj = JSON.parse(data);
				// Перебираем полученный массив
				var str_elem="";
				var chek="";
				for (var i in obj){
					 // ********************************************
					 //!!!!!!!!!!! костыль!!!!!!!!!!!!!!!!!!!!!!!!!!
					 // ********************************************
					 if (i==num){
					 	chek='checked="checked"';
					 } else {
					 	chek='';
					 }
					 // ********************************************
					 // ********************************************
					 // ********************************************
					 str_elem+='<label>\
								<input \
								type="radio" \
								name="otdl_type_'+uzl+'" '+chek+'\
								value="'+obj[i]["value"]+'">'+obj[i]["name"]+'</label>';
				// alert(str_elem);
				elem.html(str_elem);
				com_sale();
				}
			});
		}
	/*********************************************/
	// детей ламината
	/*********************************************/
	$("#laminat").click(function(){
		// Определяем узел по которому искать детей
		var uzl=$(this).attr("data-item");
		// alert(uzl);
		// var cost=$(this).val();
		var state=$(this).prop("checked");
		var elem_up=$(this).parent().parent().find(".child");
		if (state && uzl!=0){
			// Наполняем блок детьми в виде радиогруппы
			child_radion(uzl, elem_up, 0);
		} else {
			elem_up.html("");
			com_sale();
		}
	})

Последний раз редактировалось dee3000, 16.06.2015 в 21:00.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно прописать полученные значения с сервера? Dimaz jQuery 0 07.12.2012 19:46
как правильно отслеживать вставку html() bombascter jQuery 15 20.11.2012 09:47
Как правильно прописать параметры? uExpo Общие вопросы Javascript 3 16.07.2011 18:07
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30