请问大家一个问题,json可以通过JQuery传递这个格式的json数据到后台吗:{"user":[{"username":"value1","password":"123"},{"username":"value2","password":"456"}]}
我测试了一下,方法1是不能传递到java后台的,而方法2、3是可以传递到java后台的
[code="java"]
$(function(){
var jsonText = "{'user':[{'username':'zhangsan','password':'123' },{'username':'xx','password':'456' }]}";//方法1
// var jsonText = {"username":"zhanglong","password":"123"};// 方法2
//json = {"user.username":"zhangsan","user.password":123};//方法3
$.ajax({
type:"POST",
data:jsonText,
url:"search.action",
contentType:"application/json"
});
});
[/code]
首先你要保证你的json字符串是正确的,要不然jquery转换的时候就出错,那么你后台就获取不到东西了!
至少在1.32以前的版本是不支持的。
$(json).serilize()会生成user=Object&user=Object
这个版本不支持深层次上的转化,一级的到是可以。
如{user:123,name:"aaa"}可以,要是其中再有json对象的话就不行了。
但是据称jquery1.4以后的版本就没这个问题,你自己测下就知道了。
jquery升得真快哟,都1.42了,我们还在用1.26呢
你这个"{'user':[{'username':'zhangsan','password':'123' },{'username':'xx','password':'456' }]}"。
最外层不要加引号就对了。
这样
{'user':[{'username':'zhangsan','password':'123' },{'username':'xx','password':'456' }]}
1的json你可以使用json2.js转换,然后通过data传入。
你可能也注意到了,你的方法1是一个json字符串,而你的方法2和3都是json对象。对于json对象如{foo:["bar1", "bar2"]} ,jquery会自动转化成&foo=bar1&foo=bar2'这样的字符串后形势。我使用json格式化器,你的方法1的字符串不能解析,2和3的都可以!
contentType:"application/json"这个改为
dataType:"json"
还是用你的:{"user":[{"username":"value1","password":"123"},{"username":"value2","password":"456"}]} 这个传
通过火狐可以看到
参数application/x-www-form-urlencoded
user[0][password] 123
user[0][username] value1
user[1][password] 456
user[1][username] value2
源代码
user%5B0%5D%5Busername%5D=value1&user%5B0%5D%5Bpassword%5D=123&user%5B1%5D%5Busername%5D=value2&user%5B1%5D%5Bpassword%5D=456
我在后台打印 System.out.println(ServletActionContext.getRequest().getParameter("user[0][password]")); //123就打印出来了