今天在写action的时候用request.getParameter()这个方法,死活拿不到前台用$.ajax()post过来的数据,取到的参数值都是null,最让我无解的是我去追踪network,请求200.而且我还可以返回来数据。network如图
![](https://img.haomeiwen.com/i3022141/4019f0d169036f17.png)
ajax提交参数如下:
$.ajax({
url: "http://127.0.0.1:8080/MyFMS/account",
ContentType: "application/json",
data: data.field, //请求的附加参数,用json对象
method: 'POST',
success: function (res) {
console.log(res);
}
});
我检查了好几遍,感觉没什么问题,然后在网上搜索了很久,终于找到了病因。问题出在ContentType这里,乍一看,我要返回json数据,没毛病啊,但事实上,ContentType这个字段表示你想要你提交的参数以什么格式传输,当值为"application/json"的时候,我们其实传输过去的是json形式的字符串,所以服务器端是无法通过request.getParameter()来获取值的,所以解决办法是将此字段改成“application/x-www-form-urlencoded;”。那么这个值表示什么呢?这个值即表示参数值以key-value形式传输,所以服务器端可以通过requests.getParameter()来获得参数值。事实上,我们用form表单提交,其实ContentType默认就是这个值。
所以正确的ajax参数设置应该为:
$.ajax({
url: "http://127.0.0.1:8080/MyFMS/account",
ContentType: "application/x-www-form-urlencoded", //或者不设,默认就是这个值
dataType:"json",
data: data.field, //请求的附加参数,用json对象
method: 'POST',
success: function (res) {
console.log(res);
}
});
dataType这个字段与contentType这个字段表示的意思刚好相反,表示response的内容以什么样的格式返回,可以理解为设置响应头的contentType这个字段。
结论:contentType一般不用设置,大多数时候,默认值可以满足我们的要求,想要返回json数据的时候,我们设置dataType为“json”就可以了。
网友评论