Как правильно прописать массив?
Имеется следующий код:
// вывод детей в радиогруппу /*********************************************/ // Мы должны произвести запрос детей выбранного узла 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"} и т. д. } Как правильно прописать массив чтоб заработала функция. (при отмеченном чекбоксе открывается блок с радиокнопками) |
Цитата:
$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 получит клиент |
Пожалуйста простите мне мою тупость!!!
С Вашим кодом к сожалению не работает. Тоесть я создаю файл param.php вставляю Ваш код с ним не работает. |
dee3000,
что у вас в data -- может ничего и парсить ненадо obj = data; |
obj = data;
попробовал, выводит не скончаемый какой то массив, и не там где нужно. Объясню пожалуй подробнее Это оконный калькулятор как на этом сайте: http://www.xn--b1agpeoggke8j.xn--p1ai/tseny/calculator при выборе чекбокса например ламинация открываются дочерние пункты А вот что у меня: http://modus-stroi.ru/modusnew/calkulator.php все работает кроме этого. скрипт скачаный но он не полный, все что мог допилил, но я не знаю совсем js? по этому прошу помощи. |
Цитата:
а) у вас показан объект, а это будет в том случае, если данные этого массива на серверной стороне тоже являются объектом, или же при 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 } Нужно только иметь ввиду, что обход массива будет происходить с конца его. |
dee3000,
сложно вам помочь -- много лишнего грузится , пара тройка ошибок уже в консоли сидит ... ненадо грузить jquery несколько раз -- достаточно одной загрузки. |
Огромное спасибо Вам за помощь, но я должен был сразу сказать что я полный ноль в js и сейчас совсем не понимаю даже о чем речь.
Но да бог с ним, обойдусь без выпадающих радиокнопок, раз все настолько сложно. Просто добавлю чекбоксов ))) + Вам отправил в карму. |
ошибки конечно исправлю, сайт еще только начат, сейчас вот прикручиваю это скрипт калькулятора.
|
Вот более полная часть кода, может кто посмотрит?
// выбор типа дома $("#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(); } }) |
Часовой пояс GMT +3, время: 12:39. |