这两天在做一个短信发送平台,在做的过程中又遇到了一些问题。以前公司的项目是基于springmvc框架搭建的,有很多东西都是框架内已经考虑好的,开发者只需要简单地按照步骤来实现即可。
现在在新公司里,项目完全是基于servlet+jsp搭建的内部框架使用的,所以为了熟悉使用原生的servlet和jsp,自己做的短信发送平台也都基于servlet和jsp。
在使用ajax请求后台servlet的内容时,出现了servlet获取不到数据。代码如下:
$.ajax({
url:path+"/pages/sendsms.action",
type:"POST",
dataType:"json",
processData:false,
async: false,
cache: false,
data:{phone : $.trim($("#phone").val()),content:$.trim($("#content").val())},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function(){
alert("发送成功");
},
error: function () {
alert("error");
}
});
在后台通过request.getParameter()
来获取数据,但是打印出来的内容为null。
一开始以为是原生的servlet无法接受来自ajax的内容,然后将上传的值改为json格式,但是还是无法获取到正常的值。
然后将注意力集中在ajax的参数之中,认为contentType存在着错误。将contentType改为“json”,在火狐浏览器中看到的请求参数为正确的json格式,但是在servlet中还是无法获取到正常的值。
最后才发现问题的关键在processData:false当中,这个参数默认值为true,用于将参数对象序列化。
同时还有一个问题:
在ajax提交完成之后,回调总是error,就算已经请求成功还是一样的问题,最后将问题锁定在servlet中并没有返回json格式的响应内容。