Как правильно прописать массив?
Имеется следующий код:
// вывод детей в радиогруппу
/*********************************************/
// Мы должны произвести запрос детей выбранного узла
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, время: 18:46. |