16.06.2015, 15:52
|
Интересующийся
|
|
Регистрация: 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"}
и т. д.
}
Как правильно прописать массив чтоб заработала функция.
(при отмеченном чекбоксе открывается блок с радиокнопками)
|
|
16.06.2015, 16:15
|
Профессор
|
|
Регистрация: 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 получит клиент
|
|
16.06.2015, 18:07
|
Интересующийся
|
|
Регистрация: 12.06.2015
Сообщений: 23
|
|
Пожалуйста простите мне мою тупость!!!
С Вашим кодом к сожалению не работает.
Тоесть я создаю файл param.php вставляю Ваш код с ним не работает.
|
|
16.06.2015, 18:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
dee3000,
что у вас в data -- может ничего и парсить ненадо
obj = JSON.parse(data);
obj = data;
|
|
16.06.2015, 18:40
|
Интересующийся
|
|
Регистрация: 12.06.2015
Сообщений: 23
|
|
obj = data;
попробовал, выводит не скончаемый какой то массив, и не там где нужно.
Объясню пожалуй подробнее
Это оконный калькулятор как на этом сайте: http://www.xn--b1agpeoggke8j.xn--p1ai/tseny/calculator
при выборе чекбокса например ламинация открываются дочерние пункты
А вот что у меня: http://modus-stroi.ru/modusnew/calkulator.php
все работает кроме этого.
скрипт скачаный но он не полный, все что мог допилил, но я не знаю совсем js? по этому прошу помощи.
|
|
16.06.2015, 18:53
|
Профессор
|
|
Регистрация: 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
}
Нужно только иметь ввиду, что обход массива будет происходить с конца его.
|
|
16.06.2015, 19:01
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,124
|
|
dee3000,
сложно вам помочь -- много лишнего грузится , пара тройка ошибок уже в консоли сидит ... ненадо грузить jquery несколько раз -- достаточно одной загрузки.
|
|
16.06.2015, 19:10
|
Интересующийся
|
|
Регистрация: 12.06.2015
Сообщений: 23
|
|
Огромное спасибо Вам за помощь, но я должен был сразу сказать что я полный ноль в js и сейчас совсем не понимаю даже о чем речь.
Но да бог с ним, обойдусь без выпадающих радиокнопок, раз все настолько сложно. Просто добавлю чекбоксов )))
+ Вам отправил в карму.
|
|
16.06.2015, 19:11
|
Интересующийся
|
|
Регистрация: 12.06.2015
Сообщений: 23
|
|
ошибки конечно исправлю, сайт еще только начат, сейчас вот прикручиваю это скрипт калькулятора.
|
|
16.06.2015, 20:58
|
Интересующийся
|
|
Регистрация: 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.
|
|
|
|