Ajax 弹簧3+出现问题;JSON:HTTP状态406?
在我的SpringMVC 3.0项目中,我试图通过Ajax发送州名来获取城市列表。 为此,我在JSP中使用了以下调用(使用jQuery):Ajax 弹簧3+出现问题;JSON:HTTP状态406?,ajax,json,jquery,spring-mvc,Ajax,Json,Jquery,Spring Mvc,在我的SpringMVC 3.0项目中,我试图通过Ajax发送州名来获取城市列表。 为此,我在JSP中使用了以下调用(使用jQuery): <script type="text/javascript"> function getCities() { jq(function() { jq.post("getCities.html", { stateSelect: jq("#stateSelect").val(
<script type="text/javascript">
function getCities() {
jq(function() {
jq.post("getCities.html",
{ stateSelect: jq("#stateSelect").val()},
function(data){
jq("#cities").replaceWith('<span id="cities">Testing</span>');
});
});
}
</script>
请引导我。我做错了什么??救命 您的响应内容类型不正确,应该是application/json 您需要将jackson添加到/lib目录 你应该有
<mvc:annotation-driven />
在serlvet-name.xml文件中
此外,我建议您将您的请求映射为get,并尝试使用googlechrome浏览它,以查看它是否返回正确的结果。它具有非常好的json表示 问题不在服务器端,而在客户端 仔细查看错误消息:根据请求中发送的Accept标头,请求的资源(由服务器端生成))只能生成不可接受的内容(JSON)(由客户端接收!) 检查您的请求标题: Accept */* 接受*/* 试着这样做:
function getCities() {
jq(function() {
jq.post(
"getCities.html", // URL to post to
{ stateSelect: jq("#stateSelect").val() }, // Your data
function(data) { // Success callback
jq("#cities").replaceWith('<span id="cities">Testing</span>');
},
"json" // Data type you are expecting from server
);
});
}
函数getCities(){
jq(函数(){
jq.post(
“getCities.html”,//要发布到的URL
{stateSelect:jq(“#stateSelect”).val()},//您的数据
函数(数据){//成功回调
jq(“城市”)。替换为(“测试”);
},
“json”//您期望从服务器获得的数据类型
);
});
}
这将把Accept头更改为以下内容(从jQuery 1.5开始):
接受:application/json,text/javascript,*/*;q=0.01
这将明确地告诉服务器端您需要JSON。正如Peter在他的评论中所写,问题的原因是Spring无法加载Jackson。默认情况下,它不是由依赖项加载的。在我添加了依赖项之后
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.2</version>
</dependency>
org.codehaus.jackson
杰克逊·贾克斯
1.9.2
JSON是在浏览器中键入地址后返回的,没有使用Accept头的任何技巧(正如它应该做的那样)
在Tomcat 7.0上测试。我在使用Apache HTTPClient调用少数服务时也遇到了类似的问题。问题出在客户端,而不是服务器。我使用了一个头接受application/json的HTTPRequester,它工作得很好。使用jQuery,您可以将contentType设置为所需的类型(这里是application/json;charset=UTF-8'),并在服务器端设置相同的头
请记住在测试时清除缓存。如果没有加载Jackson库,Spring应用程序将不会提供application/json,从而触发406。请注意,/的原始request-Accept头应该表示“anywhere”。对于我来说,它是缺少的库。作为记录:必要的Maven组/工件组合是org.codehaus.jackson/jackson-mapper-asl,我刚找到的最新版本是1.9.0(尽管网站上说的是1.9.1)。这在应该是评论而不是答案中有更全面的介绍。
function getCities() {
jq(function() {
jq.post(
"getCities.html", // URL to post to
{ stateSelect: jq("#stateSelect").val() }, // Your data
function(data) { // Success callback
jq("#cities").replaceWith('<span id="cities">Testing</span>');
},
"json" // Data type you are expecting from server
);
});
}
Accept: application/json, text/javascript, */*; q=0.01
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>1.9.2</version>
</dependency>