在web项目中,经常遇到ajax提交表单,这时候会遇到那种一个参数有多个值的情况,比如checkbook,那么后台如何接收呢?
我所知道的有两种方式:
方式1:值之间用个符号分割
$.ajax{
url:"url",
data:{ param1: "1,2,3"}
}
这种方式在我看来没啥大问题,但是前提是在参数值中不能出现分割符号所使用的字符,否则后台split的时候获取到的值就不对,那么为了避免这个问题,就有了方式2
方式2:
将参数的值以数组的方式传到后台,后台用数组去取
$.ajax{
url:"url",
data:{ param1: [1,2,3]}
}
这样看起来是没问题,但在jquery的ajax中其实是有问题的,因为后台接受不到这个参数,那么问题出在哪呢?我们可以f12看看传到后台的到底是个什么鬼,为何接受不到呢?
于是f12一下,我秒懂了
原来jquery的ajax把参数弄成了这个样子,这不科学啊,为什么会这样呢?
于是去看了jquery的文档
原来发送ajax请求之前,jquery会调用$.param()l来深度递归一个对象来满足现在脚本语言和框架,比如PHP, Ruby on Rails等。那么如何解决呢?我们可以通过traditional 为true来阻止其深度序列化。
$.ajax{
url:"url",
traditional:true,
data:{ param1: [1,2,3]}
f12一下,参数格式变成了这种,嗯,是我们想要的结果
}
这样的话就解决问题了