jquery 如何把复杂数据类型传给 webservice 本帖最后由 dreams1981 于 2011-03-29 16:16:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把请求的content-type设为:text/jsonwebservice端直接通过HttpRequest,获得该json字符串,反序列化。http://blog.csdn.net/fangxinggood/archive/2011/03/26/6279233.aspx var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}$.ajax({ type: "POST", url: "jQueryAjaxTest.asmx/EditEmployee", data: '{"employee":' + employee + '}', success: function(msg){ } }); jquery 如何向 webservice 发送Employee 这样的复杂数据类型 //jQueryAjaxTest.asmxpublic string EditEmployee(Employee employee){ //代码处理 return "OK";} asp.net ajax框架是支持 复杂类型数据的参数的namespace ComplexType{ /// <summary> /// Summary description for Color /// </summary> public class Color { public Color() { } public Color(byte red, byte green, byte blue) { this.Red = red; this.Green = green; this.Blue = blue; } public byte Red; public byte Green; public byte Blue; }}function ReverseColor(){ // var color = {"Red" : 50, "Green" : 100, "Blue" : 200}; var color = new ComplexType.Color(); color.Red = 50; color.Green = 100; color.Blue = 200; ColorService.Reverse(color, onSucceeded);}function onSucceeded(result){ alert(String.format( "Red: {0}\nGreen: {1}\nBlue: {2}", result.Red, result.Green, result.Blue));} 楼上正解,ms ajax可能库大了点,但是序列化都给你做好了,在客户端js你直接传入对象,web service直接取对象,舒服!不然用jquery拟就要自己转,搂住一定要用jquery ajax的话,可以考虑用json2.js来做json对象的转换。 json2.js 可以把 var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}转换成 webscrvice 接受的 Employee 对象吗? json2.js 只能把json转换成javascript对象吧 Json.Net利用Json来传递吧,Json.Net提供了序列化和反序列化的方法。 Asp.Net中使用Json一个很好的例子,也是WebService .net有json转换的类你可以研究一下 var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}这个就是一个json object,等同于var employee = new Object()employee.FirstName = "X";employee.LastName = "PP";employee.Salary = 2000;employee.FullName = "X PP";你要把这个object往webservice传,如果在客户端做你就得转成json string,这个json object和string互转的插件,方法有很多,这里我用json2.js以搂住例子来说,可以这么做----------------------------------var employee = new Object()employee.FirstName = "X";employee.LastName = "PP";employee.Salary = 2000;employee.FullName = "X PP";var param = new Object();param.Employee = employee; $.ajax({ url: 'webservice.asmx/function', type: 'POST', contentType: "application/json", data: JSON.stringify(param), //这里做object和string的转换 success: function (data, textStatus, jXHR) { } }, error: function (jXHR, textStatus, errorThrown) { } }); $.ajax({ url:"WebService.asmx/TrueOrFalse", type:"post", contentType: "application/json", data:"{select:1}", dataType:"json", success:function(result){ alert(result.d); }, error:function(resMsg){alert(resMsg);} }) [WebMethod] public string TrueOrFalse(string select) { if (select == "1") return "true"; else return "false"; } 可以当做一个参数传过去,在用json反序列化为你的类型 showenxxx 的有个小误var param = new Object();param.Employee = employee;//应该为参数名不是类型param.employee = employee; 参数这个地方你只用保证客户端参数名和webservice参数名一样就行了param.abc = employee然后webservice里面一样名字就行public string EditEmployee(Employee abc){ //代码处理 return "OK";} showenxxx 说的是,这个我也知道.指出来只是为了后来参考的人避免走弯路,并不是有意挑刺. 让页面无法刷新 为什么asp.net页面会自动产生css 一个window.open参数的问题 能不能告诉我这样是怎么实现的·· GridView数据导出Excel 关于动网论坛7的一个问题以及做项目的一个问题 在用户控件上如何动态的加载另一个用户控件? asp.net程序中新建文件夹之后重新加载页面Session丢失是怎么回事? 在使用了模板页的内容页里面写js函数非空验证 高分求解:aspnet的奇怪问题 高分求思路 关于旺旺群发~~~~~~ 问个简单的关于mvc模型验证的[DataType(DataType.Password)]作用问题
webservice端直接通过HttpRequest,获得该json字符串,反序列化。http://blog.csdn.net/fangxinggood/archive/2011/03/26/6279233.aspx
var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}
$.ajax({
type: "POST",
url: "jQueryAjaxTest.asmx/EditEmployee",
data: '{"employee":' + employee + '}',
success: function(msg){
}
}); jquery 如何向 webservice 发送Employee 这样的复杂数据类型 //jQueryAjaxTest.asmx
public string EditEmployee(Employee employee)
{
//代码处理
return "OK";
}
{
/// <summary>
/// Summary description for Color
/// </summary>
public class Color
{
public Color() { } public Color(byte red, byte green, byte blue)
{
this.Red = red;
this.Green = green;
this.Blue = blue;
} public byte Red; public byte Green; public byte Blue;
}
}
function ReverseColor()
{
// var color = {"Red" : 50, "Green" : 100, "Blue" : 200};
var color = new ComplexType.Color();
color.Red = 50;
color.Green = 100;
color.Blue = 200;
ColorService.Reverse(color, onSucceeded);
}function onSucceeded(result)
{
alert(String.format(
"Red: {0}\nGreen: {1}\nBlue: {2}",
result.Red,
result.Green,
result.Blue));
}
var employee = {"__type":"Employee","FirstName":"X","LastName":"PP","Salary":2000,"FullName":"X PP"}
转换成 webscrvice 接受的 Employee 对象吗?
利用Json来传递吧,Json.Net提供了序列化和反序列化的方法。
一个很好的例子,也是WebService
var employee = new Object()
employee.FirstName = "X";
employee.LastName = "PP";
employee.Salary = 2000;
employee.FullName = "X PP";你要把这个object往webservice传,如果在客户端做你就得转成json string,这个json object和string互转的插件,方法有很多,这里我用json2.js
以搂住例子来说,可以这么做
----------------------------------
var employee = new Object()
employee.FirstName = "X";
employee.LastName = "PP";
employee.Salary = 2000;
employee.FullName = "X PP";var param = new Object();
param.Employee = employee; $.ajax({
url: 'webservice.asmx/function',
type: 'POST',
contentType: "application/json",
data: JSON.stringify(param), //这里做object和string的转换
success: function (data, textStatus, jXHR) {
}
},
error: function (jXHR, textStatus, errorThrown) { }
});
url:"WebService.asmx/TrueOrFalse",
type:"post",
contentType: "application/json",
data:"{select:1}",
dataType:"json",
success:function(result){
alert(result.d);
},
error:function(resMsg){alert(resMsg);}
}) [WebMethod]
public string TrueOrFalse(string select)
{
if (select == "1")
return "true";
else
return "false";
}
param.Employee = employee;
//应该为参数名不是类型
param.employee = employee;
public string EditEmployee(Employee abc)
{
//代码处理
return "OK";
}