Symfony2上的Ajax填充字段(类别填充子类别)

时间:2015-02-20 12:49:21

标签: ajax forms symfony

当我从选择框中选择一个类别时,我想填充一个子类别。 我跟着this(以及互联网上的许多其他东西已经好几天了),但我觉得它不适合与Ajax一起使用,因此不能像我希望的那样使用动态表单。

知道我该怎么做吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您应该编写一个控制器,它将处理您的ajax请求(即使用类别json的响应)。然后你应该在你的表单页面上写一个JS代码,它将请求这个控制器动作,处理响应并更新你的选择框

即使你有一个路由器名为categories_ajax_path的控制器,它会响应像

这样的JSON
[
  {'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期望的选择),所以你需要额外的调整