jQuery-JSON填充下拉列表


问题内容

我正在尝试从需要JSON的jQuery调用中填充一个下拉列表。我在网上找到了以下代码,这是我的起点(Java和Spring
3),但是我接受其他/更好的方法:

JSP(仅显示相关代码):

<script language="JavaScript">
            $(document).ready(function() { 
                $('#parkName').change(
                function(){
                    alert($(this).val());
                    $.getJSON('${findUnitsURL}', {
                        parkName : $(this).val(),
                        ajax : 'true'
                    }, function(data) {
                        var html = '<option value="">City</option>';
                        var len = data.length;
                        for ( var i = 0; i < len; i++) {
                            html += '<option value="' + data[i].name + '">'
                                + data[i].name + '</option>';
                        }
                        html += '</option>';

                        $('#parkUnitTitleAersa').html(html);
                    });
                });
            });
        </script>


<div id="content">

                <form:form method="post" action="mainForm" commandName="mainForm">

                    <form:select id="parkName" path="parkName">
                        <form:option value="NONE" label="--- Select ---" />
                        <form:options items="${parkList}" />
                    </form:select>

                    <form:select id="parkUnitTitleAersa" path="parkUnitTitleAersa">
                        <form:option value="NONE" label="--- Select ---" />
                        <form:options items="${parkUnitList}" />
                    </form:select>

                    <p class="submit"><input type="submit" name="commit" value="Login"></p>
                    </form:form>

            </div>

具有所请求方法的Java控制器:

@RequestMapping(value = "units", method = RequestMethod.GET)
    public @ResponseBody List<String> unitsForPark(@RequestParam(value = "parkName", required = true) String parkName) {
        List<String> l = new ArrayList<String>();
        l.add("AA01");
        l.add("AA02");
        l.add("LA03");
        l.add("SG04");

        return l;
    }

当我在“ parkName”下拉列表中选择一个值时,不会填充其他值。使用萤火虫我得到这个错误:

[10:46:39.881] GET http://localhost:8084/SpringBlog/units?parkName=LA&ajax=true [HTTP/1.1 406 No Aceptable 62ms]

任何的想法?谢谢!!


问题答案:

406指出了Spring问题,因为Spring不知道如何创建数据的JSON视图,因为$.getJSON设置了header
Accept: application/json。您应该查看Spring的ContentNegotiatingViewResolverMappingJacksonJsonView

假设您已经<mvc:annotation- driven/>在Spring
Web应用程序的上下文配置中了?如果是这样,则可能只是运行Spring时Jackson不在类路径上。只需手动将其添加到您的类路径中,或者使用Maven,Ivy,Gradle(或其他依赖项管理/构建工具)将其添加为依赖项。