jquery处理json数据使用post传递参数时使用的格式是json格式

请问大家一个问题,json可以通过JQuery传递这个格式的json数据到后台吗:{"user":[{"username":"value1","password":"123"},{"username":"value2","password":"456"}]}
我测试了一下,方法1是不能传递到java后台的,而方法2、3是可以传递到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
type:"POST",
data:jsonText,
url:"search.action",
contentType:"application/json"
问题补充:飞雪无情 写道首先你要保证你的json字符串是正确的,要不然jquery转换的时候就出错,那么你后台就获取不到东西了!
那你看我的方法1json字符串正确吗?
问题补充:飞雪无情 写道首先你要保证你的json字符串是正确的,要不然jquery转换的时候就出错,那么你后台就获取不到东西了!
我刚才测试了一下,现在方法一也可以了,后台Action类获取:
public class SearchAction extends ActionSupport{
//private& U
private S
&&&&&&& //这里是关键,要定义一个名为user的List,User类为VO类,有username和password
List&User& user =new ArrayList&User&();
public List&User& getUser() {
public void setUser(List&User& user) {
this.user =
public String execute()
System.out.println("here is search1");
System.out.println(getUser().get(0).getUsername());
//JSONObject jo = JSONObject.fromObject(this.user);
//System.out.println(jo);
//this.result = jo.toString();
System.out.println("here is search2");
//System.out.println(getName());
&&&
HttpSession session = (HttpSession) ServletActionContext.getRequest().getSession();
System.out.println("user:" + session.getAttribute("user"));
return this.SUCCESS;
还有我用到了struts2-json-plugin.jar
采纳的答案
首先你要保证你的json字符串是正确的,要不然jquery转换的时候就出错,那么你后台就获取不到东西了!
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就打印出来了
你可能也注意到了,你的方法1是一个json字符串,而你的方法2和3都是json对象。对于json对象如{foo:["bar1", "bar2"]} ,jquery会自动转化成&foo=bar1&foo=bar2'这样的字符串后形势。我使用json格式化器,你的方法1的字符串不能解析,2和3的都可以!
1的json你可以使用json2.js转换,然后通过data传入。
你这个"{'user':[{'username':'zhangsan','password':'123' },{'username':'xx','password':'456' }]}"。
最外层不要加引号就对了。
这样
{'user':[{'username':'zhangsan','password':'123' },{'username':'xx','password':'456' }]}
至少在1.32以前的版本是不支持的。
$(json).serilize()会生成user=Object&user=Object
这个版本不支持深层次上的转化,一级的到是可以。
如{user:123,name:"aaa"}可以,要是其中再有json对象的话就不行了。
但是据称jquery1.4以后的版本就没这个问题,你自己测下就知道了。
jquery升得真快哟,都1.42了,我们还在用1.26呢
已解决问题
未解决问题JQuery处理json与ajax返回JSON实例
来源:&&&时间: 20:24:54&&&阅读数:
[导读] json数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法。
一、JSON的一些基础知识。JSON中对象通过{}来标识,一个{}代表一个对象
json数据是一种经型的实时数据交互的数据存储方法,使用到最多的应该是ajax与json配合使用了,下面我来给大家介绍jquery处理json数据方法。
一、JSON的一些基础知识。JSON中对象通过&{}&来标识,一个&{}&代表一个对象,如{&AreaId&:&123&},对象的值是键值对的形式(key:value)。&&[]&,标识数组,数组内部各个数据之间通过&,&分割,如[&AreaId&:&123&,&AreaId&:&345&]。很多情况下是对象数组,那就是这样:
[{&AreaId&:&123&},{&AreaId&:&345&}]
&其实数组也是一个对象,上面的格式也可以写成这样:
{&Area&:[{&AreaId&:&123&},{&AreaId&:&345&}]}
这表示一个Area对象,他有两个子数据,每个子数据也是一个对象,每个子对象都是AreaId。&JSON中字符串和字符的定义格式和一般的类定义是类似的,双引号定义字符串,单引号定义字符。JSON的键(Key)用双引号括起来,比如上面的&Area&和&AreaId&,都是用双引号括起来的,在一些语言中构造JSON字符串的时候,可以使用转义字符转义双引号。&二、操作JSON字符1、先要区分JSON字符串和JSON对象JSON字符串:
Var strJSON = &{&Area&:[{&AreaId&:&123&},{&AreaId&:&345&}]}&,
其实也可以写成这样:
Var strJSON = &{&Area&:[{&AreaId&:&123&},{&AreaId&:&345&}]}&,
这表示一个JSON字符串,由于在Js中单引号和双引号都可以表示一个字符串,所以上面第一个使用双引号和第二个使用单引号的都表示一个JSON字符串。下面看看JSON对象
Var JSON = {&Area&:[{&AreaId&:&123&},{&AreaId&:&345&}]},
看到了吧,JSON对象最外面是没有单引号或者双引号的,这就表示一个JSON对象。在服务器断的脚本:
&?php$data['id'] = 1;$dat['name'] = &mary&;$da['red']= array_merge($data,$dat);$data1['id'] = 2;$dat1['name'] = &燕子&;$da['blue']= array_merge($data1,$dat1);print_r($da);///打印出来是一个二维数组(如下)/*Array(&&& [red] =& Array&&&&&&& (&&&&&&&&&&& [id] =& 1&&&&&&&&&&& [name] =& mary&&&&&&& )&&& [blue] =& Array&&&&&&& (&&&&&&&&&&& [id] =& 2&&&&&&&&&&& [name] =& 燕子&&&&&&& ))*/echo json_encode($da);//输出的是一个转化成json格式的字符串,可以直接在js中用(如下)/*{&red&:{&id&:1,&name&:&mary&},&blue&:{&id&:2,&name&:&u71d5u5b50&}}*/?&
脚本:返回到js后的处理:第一种要用到varl转化的:是字符串的时候就要用eval转化成jquery对象(如下)
var arr = '{&red&:{&id&:1,&name&:&mary&},&blue&:{&id&:2,&name&:&u71d5u5b50&}}';//u71d5u5b50这个是php中自动转换的var dataObj = eval(&(&+arr+&)&);//这里要加上加好括号和双引号的原因我也不知道,就当是json语法,只能死记硬背了& $.each(dataObj,function(idx,item){&& && //输出& && alert(item.id+&哈哈&+item.name);&& })
第二种:不需要转化的:
var arr = {&red&:{&id&:1,&name&:&mary&},&blue&:{&id&:2,&name&:&u71d5u5b50&}};& $.each(arr,function(idx,item){&&&& && //输出&& alert(item.id+&哈哈&+item.name);})
循环也有两种方法://方法一:
$.each(arr,function(idx,item){&&&& && //输出&& alert(item.id+&哈哈&+item.name);})
//方法二:
for(var key in arr){& alert(key);& alert(arr[key].status);&}
大家可以试试效果。ajax返回JSON时的处理方式&1,使用普通的aspx页面来处理&&&&&& 本人觉得这种方式处理起来是最简单的了,看下面的代码吧
$.ajax({ &&&&&&&&&& type: &post&, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& url: &Default.aspx&, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& dataType: &json&, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& success: function (data) { &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& $(&input#showTime&).val(data[0].demoData); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& error: function (XMLHttpRequest, textStatus, errorThrown) { &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& alert(errorThrown); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& } &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });
&&&&&&&&&&&&&& 这里是后台传递数据的代码&
Response.Clear(); &&&&&&&&&&&&&&&&&&&&&&& Response.Write(&[{&demoData&:&This Is The JSON Data&}]&); &&&&&&&&&&&&&&&&&&&&&&& Response.Flush(); &&&&&&&&&&&&&&&&&&&&&&& Response.End();
&&&&&&&& 这种处理的方式将传递过来的数据直接解析为json数据,也就是说这里的前台js代码可能直接把这些数据解析成json对象数据,而并非字符串数据,如data[0].demoData,这里就直接使用了这个json对象数据
除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接原文地址:
延伸阅读 More
haowubai&&
haowubai&&
haowubai&&
haowubai&&
haowubai&&
视频教程 Video
网站服务:
专题合作 :
会员问题 : QQ
友情链接 : QQ 925939
网站投稿 :
@php100官方
php100官方微信
Copyright (C) 2007-, All Rights Reserved 版权所有 上海创恩信息技术有限公司. 沪ICP备号58cv网址导航·Customer类
public int Unid { }
public string CustomerName { }
public string Memo { }
public string Other { }
.post( url, [data], [callback], [type] )
·url:加载页的地址
·data(optional):k/v对或序列化的字符串(.serialize()),参数
·callbakc(optional):数据成功加载后的执行函数
·type(optional):请求返回的数据格式,串型
(一)ashx文件
(1)请求单实体数据
·Ashx文件,这里不对返回的数据做显式的序列化。
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
context.Response.Write(customer);
·ajax post
function GetCustomer_Ashx() {
“webdata/post_1.ashx”,
function(data) {
var sx = $.JsonToObject(data);
var tt = “”;
$.each(sx, function(k, v) {
tt += k + “:” + v + “&br/&”;
$(“#divmessage”).(tt);
“json”
(2)请求实体集合
·ashx文件
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = “吴用”, Memo = “天机星”, Other = “智多星” };
List&Customer& _list = new List&Customer&();
_list.Add(customer);
_list.Add(customer2);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(_list);
context.Response.Write(strJson);
·ajax post
function GetCustomer_AshxList() {
“webdata/post_1.ashx”,
function(data) {
var jsonObjects = $.jsonToObject(data);
var tt = “”;
$.each(jsonObjects, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
“json”
(3)带参数的请求
·ashx文件
在前者基础上添加了对请求参数的获取语句,并添加了linq查询
int iCustomerId = Convert.ToInt32(context.Request["iUnid"]);
var cus = from q in _list
where q.Unid == iCustomerId
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(cus);
·ajax post
function GetCustomer_AshxWithPara() {
“webdata/post_1.ashx”,
{ iUnid: 1 },
function(data) {
var tt = “”;
$.each(data, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
“json”
注意,这里返回的直接是json对象[object,object],可以直接解析。
这种参数传递的方法是以k/v对格式传递,post还有一种方式,那就是.serialize()之后的字串。
(二)Web Service
(1)Hello
[WebMethod]
public string HelloWorld()
return “Hello World”;
·ajax post
function WebService_Hello() {
“post_1.asmx/HelloWorld”,
function(data) {
alert(data.text);
$(“#divmessage”).html(data);
“json”
这个web方法返回一个单独的字串。这是一个纯正的字串,对于客户端来说,这是一个object对象,但也可以理解为一个[object,object]对象,而它完整的数据格式可以理解为:{text: “Hello World”}
所以这里对它进行访问,可以如下:
·data.text 这种方式对应于Object.Property
·data["text"] 这种方式对应于Object["key"]
(2)json串
[WebMethod]
public string HelloWorld_Json()
string strJson=
@”{Unid:1,CustomerName:””宋江””,Memo:””天魁星””,Other:””黑三郎””}”;
return strJ
·ajax post
function WebService_HelloJsonString() {
“post_1.asmx/HelloWorld_Json”,
function(data) {
var jsonString = data.
var jsonObject = $.jsonToObject(jsonString);
var tt = “”;
$.each(jsonObject, function(k, v) {
tt += k + “:” + v + “&br/&”;
$(“#divmessage”).html(tt);
“json”
虽然服务方法返回的是string类型的数据:
{Unid:1,CustomerName:”宋江”,Memo:”天魁星”,Other:”黑三郎”}
但客户端得到的数据却是object类型,可以理解为[object,object],也就是
{text:’{Unid:1,CustomerName:”宋江”,Memo:”天魁星”,Other:”黑三郎”}’}
客户端请求到的数据取到json字串,然后转换为json对象,后进行解析。
所以,在请求web服务方法时,如果方法返回字串类型,先要通过data.text得到做为唯一k/v对的v值,也就是json字串,然后再进行下一步操作。
(3)通过串行化返回json字串的web方法
[WebMethod]
public string GetCustomer_Json()
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(customer);
return strJ
·ajax post
function WebService_CustomerJsonString() {
“post_1.asmx/GetCustomer_Json”,
function(data) {
var jsonString = data.
var jsonObject = $.jsonToObject(jsonString);
var tt = “”;
$.each(jsonObject, function(k, v) {
tt += k + “:” + v + “&br/&”;
$(“#divmessage”).html(tt);
“json”
这个方法与(2)相同道理。
(4)客户集
[WebMethod]
public string GetCustomerList_Json()
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = “吴用”, Memo = “天机星”, Other = “智多星” };
List&Customer& _list = new List&Customer&();
_list.Add(customer);
_list.Add(customer2);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(_list);
return strJ
·ajax post
function WebService_CustomerListJsonString() {
“post_1.asmx/GetCustomerList_Json”,
function(data) {
var jsonString = data.
var jsonObject = $.jsonToObject(jsonString);
var tt = “”;
$.each(jsonObject, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
“json”
其实得到了json字串,也就能正常解析出来。主要是理解返回的数据对象的格式。
(5)带参数的ws
[WebMethod]
public string GetCustomerList_JsonPara(int iUnid)
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = “吴用”, Memo = “天机星”, Other = “智多星” };
List&Customer& _list = new List&Customer&();
_list.Add(customer);
_list.Add(customer2);
var cus = from q in _list
where q.Unid == iUnid
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(cus);
return strJ
·ajax post
function WebService_CustomerListJsonStringWithPara() {
$.post(“post_1.asmx/GetCustomerList_JsonPara”,
{iUnid:2},
function(data) {
var jsonString = data.
var jsonObject = $.jsonToObject(jsonString);
var tt = “”;
$.each(jsonObject, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
带参数的post时,post函数的type部分不能以json格式请求返回。可以省略。
调用webservice,通过Response来返回数据。
(一)Hello
[WebMethod]
public void HelloWorld()
HttpResponse Response = HttpContext.Current.R
Response.ContentEncoding = System.Text.Encoding.D
Response.Write(“Hello world!”);
·ajax post
function ajaxVoidHello() {
“post_2.asmx/HelloWorld”,
function(data) {
var jsonString = data.
$(“#divmessage”).html(data);
“json”
客户端得到的数据类型为string类型。
(二)得到客户实体
[WebMethod]
public void GetCustomer()
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(customer);
HttpResponse Response = HttpContext.Current.R
Response.ContentEncoding = System.Text.Encoding.D
Response.ContentType = “application/json”;
Response.Write(strJson);
这里ContentType很重要,这里要保留,即使空值也可以。
·ajax post
function ajaxGetCustomer() {
“post_2.asmx/GetCustomer”,
function(data) {
var jsonString =
var jsonObject = $.jsonToObject(jsonString);
var tt = ”;
$.each(jsonObject, function(k, v) {
tt += k + “:” + v + “&br/&”;
$(“#divmessage”).html(tt);
“json”
请求json数据,返回的是一个字符串,就是json字串,然后处理。
(三)得到客户集
[WebMethod]
public void GetCustomersList()
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = “吴用”, Memo = “天机星”, Other = “智多星” };
List&Customer& _list = new List&Customer&();
_list.Add(customer);
_list.Add(customer2);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(_list);
HttpResponse Response = HttpContext.Current.R
Response.ContentEncoding = System.Text.Encoding.D
Response.ContentType = “application/json”;
Response.Write(strJson);
·ajax post
function ajaxGetCustomerList() {
“post_2.asmx/GetCustomersList”,
function(data) {
alert(data);
var jsonString =
var jsonObject = $.jsonToObject(jsonString);
var tt = ”;
$.each(jsonObject, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
“json”
这些很容易理解了,返回的是json字串。处理字串就可以了。
(四)带参数的
[WebMethod]
public void GetCustomersListWithPara(int iUnid)
Customer customer = new Customer
{ Unid = 1, CustomerName = “宋江”, Memo = “天魁星”, Other = “黑三郎” };
Customer customer2 = new Customer
{ Unid = 2, CustomerName = “吴用”, Memo = “天机星”, Other = “智多星” };
List&Customer& _list = new List&Customer&();
_list.Add(customer);
_list.Add(customer2);
var q = _list.Where(p =& p.Unid == iUnid);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(q);
HttpResponse Response = HttpContext.Current.R
Response.ContentEncoding = System.Text.Encoding.D
Response.ContentType = “”;
Response.Write(strJson);
·ajax post
function ajaxGetCustomerListWithPara() {
“post_2.asmx/GetCustomersListWithPara”,
{ iUnid: 1 },
function(data) {
var tt = ”;
$.each(data, function(k, v) {
$.each(v, function(kk, vv) {
tt += kk + “:” + vv + “&br/&”;
$(“#divmessage”).html(tt);
“json”
这里返回的是[object,object]类型。
服务端的ContentType可以设置为空。
自由转载,转载请注明: 转载自
本文链接地址:
/web-note346

我要回帖

更多关于 jquery post json 的文章

 

随机推荐