使用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方法的时候,后端在接收参数后使用之前需要将字符串转换回原样。

posted @ 2016-04-13 16:41  星辰梦忆  阅读(947)  评论(0)    收藏  举报