使用jQuery前后端ajax数据交换中涉及数组(对象)时发生的问题。
今天同事说他想在前端发送ajax给后端,前端的代码为
var data = {
'author' : ['author1','author2'],
'content' : "this is a blog",
'tags' : ['p','a']
}
$.post('blog/create',data);
这里用到了jquery,他发现前端发出的数据总是出现问题。整个发送出去的数据会被解析为
{"author[]" : "author1","author[]" : "author2","content" : "this is a blog","tags[]" : "p","tags[]" : "a"}
这样后台接受到的数据是错误的。我们希望的格式是
{"author" : '['"author1","author2"']',"content" : "this is a blog","tags" : '['"p","a"']'}
发生这种问题的原因是使用jQuery在前后端ajax数据传输的过程中默认情况下只能以字符串形式传输,而不能以数组或对象形式传输。这里提供三种方法在解决这个问题。
第一种方法设置jQuery.ajaxSettings.traditional = true 。原因是jQuery在1.4版本以后为了兼容php,ror等后台发明了如此蛋疼的解析方式,而traditional设置为true后则采用最初始的方式解析,也就是可以传送数组的模式。不推荐使用,因为鬼知道这个参数什么时候会被舍弃。
第二种,手动转换,将对应的数组转换为字符串在赋值给对象的属性,太麻烦,不推荐使用。
第三种方法是使用json.stringify()进行转换。
var data = {
'author' : ['author1','author2'],
'content' : "this is a blog",
'tags' : ['p','a']
}
data = JSON.stringify(data);
$.post('blog/create',data);
这样传出去的就是转换好的字符串了,推荐使用该方法。对了忘记说了,在使用2、3方法的时候,后端在接收参数后使用之前需要将字符串转换回原样。
心有多大,世界就有多大,让青春随着梦飞翔。

浙公网安备 33010602011771号