$.ajax({
type: "post",
async: false,
cache: false,
dataType:"json",
contentType: false,
processData:false,
traditional: true, //使json格式的字符串不会被转码
url: "${ctx}/grouppurchase/add",
data: {
name: $("[name='name']").val(),
sbegin:$("#userStartDate").val()+" 00:00:00",
send:$("[name='send']").val()+" 00:00:00",
gbegin:$("[name='gbegin']").val()+" 00:00:00",
gend: $("[name='gend']").val()+" 00:00:00",
price: $("[name='price']").val(),
tprice:$("[name='tprice']").val(),
num: $("[name='num']").val(),
refund:refund,
appointment:appointment,
img:formdata,
context:editor.txt.html(),
storeid:strgetSelectValue,
},
success: function (data) {
alert("成功")
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("提交失败,错误代码:" + XMLHttpRequest.status);
alert("提交失败,错误代码:" + XMLHttpRequest.readyState);
alert("提交失败,错误代码:" + textStatus);
}
});
你后台代码的requestparam注解写了两个context
dataType 改成text
看看前台数据类型与后台数据类型,是否一致,要一致才能取到
url: "${ctx}/grouppurchase/add", 这个add是方法名把?把 @RequestMapping("/add")加到@Responsebody 上面试试
发送的请求参数没有传递过去。。
前台获取到了吗?打印出来看一下;获取到了后台我写法跟你不一样,你可以试下:
@RequestMapping(value = "/add", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
@ResponseBody
public String add(HttpServletRequest request, HttpServletResponse response,
ModelMap map) {
//我感觉有request直接获取参数就好了,当然,你用@RequestParam就少了判断少参数情况时的判断
String name = request.getParameter("name");
...
}
Controller加注解了嘛?
这么多个参数,建议使用对象接收就行了
@RequestBody 替换掉@requestparam
参数好多啊,不如用对象呢
把这句话去掉: contentType: false,
加上@RequestMapping(/add)试一下
发送请求数据参数这么多长度才15有问题
你是用ajax上传的文件吗?
朋友你的传值 console里面都打印成了对象数组了。
processData:
要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。
一般来讲都使用默认值就能满足你的需求了。基本上写"dataType"、 "type"、"url"、 "data"、 "success"足够了。
contentType:application/json。换成这个应该可以了。
1.楼主打印一下,判断一下是否进入后端的方法
若没有进入数据类型出现问题或者路径匹配有问题
2.进入则可以去除重复值在获取一下看有没有问题
3.推荐方法内部使用request.getParameter("")获取参数,该方法保证不会在未进入方法之前报错