用js生成问题的选项,然后把选项和题目一起传到后台。
根据之前写的ajax传数据的例子改了一下,发现传数组的时候会有很多的问题。
一、贴代码
$.ajax({
url:"/ajaxtest/inputquestion.do",
type:"post",
data:{
"qname":qname;
"options":options
},
dataType:"json",
success:function(){
alert('成功');
},
error:function(){
alert('失败');
}
});
上面是错误的代码,是我一开始写的样子
qname是字符串
options是一个字符串数组
二、修改过程
整个修改的过程非常漫长。
开始百度出来的都是要加contentType:"application/json",这个东西我也没有见过,直接复制过来,发现还是错的
之后又百度到很多东西,像是@RequestBody、@RequestParam啥的,还是发现了一些问题的。
按照上面这样的,传到后台去的是json对象
设置了contentType:"application/json"之后,就是告诉后台,要传一个json字符串过去,所以需要使用JSON.stringify()。
但是这种方法只能传一个参数,多了就会出现错误,所以我选择把数组传到后台,就是下面这样
$.ajax({
url:"/ajaxtest/inputquestion.do",
type:"post",
contentType:"application/json",
data:JSON.stringify(options),
dataType:"json",
success:function(){
alert('成功');
},
error:function(){
alert('失败');
}
});
而且,对应的应该在接收的参数前加上@RequestBody
@RequestMapping("inputquestion.do")
@ResponseBody
public void doInputQuestion(@RequestBody String[] options) {
for(String str : options) {
System.out.println(str);
}
}
还有一种方法可以传多个参数
在不设置contentType:"application/json"的前提下,加上traditional: true,date中依旧是json对象
$.ajax({
url:"/ajaxtest/inputquestion.do",
type:"post",
traditional: true,
data:{
"qname":qname;
"options":options
},
dataType:"json",
success:function(){
alert('成功');
},
error:function(){
alert('失败');
}
});
Controller部分改成这个样子
@RequestMapping("inputquestion.do")
@ResponseBody
public void doInputQuestion(@RequestParam String qname, @RequestParam String[] options) {
for(String str : options) {
System.out.println(str);
}
}
两种结果虽然都是会进入到error中,但是后台都是可以接收到数据的