【问题标题】:jQuery - JSON to populate dropdown listjQuery - JSON 填充下拉列表
【发布时间】:2013-04-16 10:24:06
【问题描述】:

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

有什么想法吗?谢谢!!

【问题讨论】:

  • 你能显示脚本对服务器的实际请求吗?如果你“手动”使用 url 来检索数据,你会收到你期望的结果吗?
  • 406 指向 Spring 问题,因为 Spring 不知道如何创建数据的 JSON 视图,因为 $.getJSON 正在设置标题 Accept: application/json。你应该看看 Spring 的 ContentNegotiatingViewResolverMappingJacksonJsonView
  • @ShinTakezou:“手工”是什么意思?直接写到浏览器里?我已经尝试过了,但它检索到一个错误(我可能没有正确执行它....)你能给我举个例子吗?
  • @andyb:事实上,我没有做任何 JSON 配置,虽然我看到有必要添加一些 Jackson 依赖项。但是我不知道在哪里添加它们...
  • 嘿,现在可以了!谢谢!!我刚刚将 Jackson .jars 添加到我的项目中并且运行良好。

标签: java jquery json jsp spring-mvc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多