1

我正在尝试从需要 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]

任何想法?谢谢!!

4

1 回答 1

1

406指向一个 Spring 问题,因为 Spring 不知道如何创建数据的 JSON 视图,因为$.getJSON正在设置 header Accept: application/json。你应该看看 Spring 的ContentNegotiatingViewResolverMappingJacksonJsonView

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

于 2013-04-23T11:06:44.667 回答