【发布时间】: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 的 ContentNegotiatingViewResolver 和 MappingJacksonJsonView -
@ShinTakezou:“手工”是什么意思?直接写到浏览器里?我已经尝试过了,但它检索到一个错误(我可能没有正确执行它....)你能给我举个例子吗?
-
@andyb:事实上,我没有做任何 JSON 配置,虽然我看到有必要添加一些 Jackson 依赖项。但是我不知道在哪里添加它们...
-
嘿,现在可以了!谢谢!!我刚刚将 Jackson .jars 添加到我的项目中并且运行良好。
标签: java jquery json jsp spring-mvc