当我从选择框中选择一个类别时,我想填充一个子类别。 我跟着this(以及互联网上的许多其他东西已经好几天了),但我觉得它不适合与Ajax一起使用,因此不能像我希望的那样使用动态表单。
知道我该怎么做吗?
感谢。
答案 0 :(得分:0)
您应该编写一个控制器,它将处理您的ajax请求(即使用类别json的响应)。然后你应该在你的表单页面上写一个JS代码,它将请求这个控制器动作,处理响应并更新你的选择框
即使你有一个路由器名为categories_ajax_path
的控制器,它会响应像
[
{'label':'some category 1','id':1,'group':'group 1'},
{'label':'some category 2','id':2,'group':'group 2'},
{'label':'some category 3','id':3,'group':'group 1'}
]
然后像这样将
添加到页面中<script>
$.getJSON('{{ path('categories_ajax_path') }}', function (data) {
var opt_groups = {};
$.each(data, function (i, value) {
if (!(value.season in opt_groups))
opt_groups[value.group] = [];
var opt = $('<option/>');
opt.val(value.id);
opt.text(value.title);
opt_groups[value.group].push(opt);
});
for (var group in opt_groups) {
if (!opt_groups.hasOwnProperty(group)) continue;
var $opt_group = $("<optgroup/>", {'label': group});
opt_groups[season].forEach (function ($item){
$opt_group.append($item);
});
$('#category_list').append($opt_group);
}
})
</script>
问题是ajax填充的表单可能无法通过symfony内置验证(因为这不是symfony期望的选择),所以你需要额外的调整