Java Web知识Java Web之ajax传值

解决action中取不到ajax提交的参数值

2017-11-12  本文已影响17人  想酷却酷不起来

今天在写action的时候用request.getParameter()这个方法,死活拿不到前台用$.ajax()post过来的数据,取到的参数值都是null,最让我无解的是我去追踪network,请求200.而且我还可以返回来数据。network如图


image.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”就可以了。

上一篇 下一篇

猜你喜欢

热点阅读