jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
发布时间:2016-12-30 来源:查字典编辑
摘要:jQueryajaxwebservice:get和post一、GET方式客户端复制代码代码如下:vardata={classCode:"00...

jQuery ajax webservice:get 和 post

一、GET 方式

客户端

复制代码 代码如下:

var data = { classCode: "0001"}; // 这里要直接使用JOSN对象

$.ajax({

type: "GET",

contentType: "application/json; charset=utf-8",

url: "/WebServices/ProductPropertyWebService.asmx/GetProductPropertyList",

dataType: "json",

anysc: false,

data: data,

success: RenderProperties,

error: function (XMLHttpRequest, textStatus, errorThrown) {

alert(errorThrown + ':' + textStatus); // 错误处理

}

});

服务器端

代码

复制代码 代码如下:

[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] //UseHttpGet = true

public List<Property> GetProductPropertyList()

{

string classCode = HttpContext.Current.Request["classCode"]; // Get 方式,要在查询字符串里得到参数值

return PropertyManager.GetPropertySet(classCode, "zh-CN").DataList;

}

二、POST 方式

客户端

代码

复制代码 代码如下:

var data = '{ classCode: "' + classCode + '", city: "GuangDong" }'; // 这里要使用拼接好的JOSN字符串

$.ajax({

type: "POST",

contentType: "application/json; charset=utf-8",

url: "/WebServices/ProductPropertyWebService.asmx/GetProductPropertyList",

dataType: "json",

anysc: false,

data: data, // Post 方式,data参数不能为空"",如果不传参数,也要写成"{}",否则contentType将不能附加在Request Headers中。

success: RenderProperties,

error: function (XMLHttpRequest, textStatus, errorThrown) {

alert(errorThrown + ':' + textStatus); // 错误处理

}

});

服务器端

代码

复制代码 代码如下:

[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] // UseHttpGet = false

public List<Property> GetProductPropertyList(string classCode, string city) // Post 方式,参数对应JSON字段属性,并自动赋值直接使用

{

return PropertyManager.GetPropertySet(classCode, "zh-CN").DataList;

}

注意:GET方法与POST方法不同,有参数的时候,如果参数的值不是ASCII字符(比如中文),GET的参数要encodeURI编码,要不服务端接收到的数据为乱码。

复杂的Json数据提交

简单的Json 格式的数据如 { name:Yangjun, age:27 }

复杂的Json格式的数据,其实只是Json嵌套,比如: {name:yangjun, age:27, child:[{name:yangke, age:1},{name:yangbin, age:2}]}

如果是这种复杂的Json格式的数据要提交,并在Webservices中获取,然后根据这个Json格式的字符串,序列成.net对象,应该怎么做呢?

比如我要提交下面的数据:

客户端:

代码

复制代码 代码如下:

var productPropertyTemplate = {"ProductId":10024, "PropertyList":[

{"PropertyId":18, "PropertyType":"text", "PropertyValue":"号码是100"},

{"PropertyId":19, "PropertyType":"checkbox", "PropertyValue":"57|28"}]}

$.ajax({

type: "GET",

contentType: "application/json; charset=utf-8",

url: "/WebServices/ProductPropertyWebService.asmx/PostProductPropertyList",

anysc: false,

data: { propertyList: productPropertyTemplate },

dataType: "json",

success: function (result) { alert(result.d) },

error: function (XMLHttpRequest, textStatus, errorThrown) {

alert(errorThrown + ':' + textStatus);

}

});

服务器端:

1、要反序列化Json字符为.net对象,有比较多的开源类库,我使用的是.net 3.5版本以上自带的DataContractJsonSerializer,写一个辅助类:

代码

复制代码 代码如下:

/// <summary>

/// Json序列化和反序列化的帮助方法

/// </summary>

public class JsonHelper

{

/// <summary>

/// JSON序列化:把对象序列化成Json格式的字符串

/// </summary>

public static string JsonSerializer<T>(T t)

{

var ser = new DataContractJsonSerializer(typeof(T));

var ms = new MemoryStream();

ser.WriteObject(ms, t);

string jsonString = Encoding.UTF8.GetString(ms.ToArray());

ms.Close();

return jsonString;

}

/// <summary>

/// JSON反序列化:根据Json格式的字符串,反序列化成对象

/// </summary>

public static T JsonDeserialize<T>(string jsonString)

{

var ser = new DataContractJsonSerializer(typeof(T));

var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

var obj = (T)ser.ReadObject(ms);

return obj;

}

}

2、因为要反序列化成相应的对象,所以先构造两个对象类,注意每个类和类的字段前面的特性修改符:

代码

复制代码 代码如下:

[DataContract]

public class MProductProperty

{

[DataMember(Order = 0, IsRequired = true)]

public int ProductId { set; get; }

[DataMember(Order = 1, IsRequired = true)]

public List<MProperty> PropertyList { set; get; }

}

public class MProperty

{

[DataMember(Order = 0, IsRequired = true)]

public int PropertyId { set; get; }

[DataMember(Order = 1, IsRequired = true)]

public string PropertyType { set; get; }

[DataMember(Order = 2, IsRequired = true)]

public string PropertyValue { set; get; }

}

3、接收并处理Json数据的Web方法:

代码

复制代码 代码如下:

[WebMethod]

[ScriptMethod(UseHttpGet = true)]

public string PostProductPropertyList()

{

string jsonString = HttpContext.Current.Request["propertyList"];

var productProperty = JsonHelper.JsonDeserialize<MProductProperty>(jsonString); // productProperty 成功反序列化成MProductProperty的对象

//返回接收成功标识

return "postsuccess";

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类