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"; }

 
 
 

jQuery提交Json数据到Webservice,并接收返回的Json数据的更多相关文章

  1. Java后端发出post请求带参数并接收返回的json

    核心代码: 参数格式: “key1=value1&key2=value2” /*** sendUrl    (远程请求的URL)* param    (远程请求参数)* JSONObject  ...

  2. [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet

    #region 接口返回的Xml转换成DataSet /// <summary> /// 返回的Xml转换成DataSet /// </summary> /// <par ...

  3. 使用Map接收返回数据库的数据

    查询返回值是map类型的一条数据 1 首先在接口中写方法 public interface EmployeeMapper { //返回一条记录的map:key就是列名,值就是对应的值 public M ...

  4. 【JEMTER】后置处理器JSON Path Extractor获取server端返回的json中某项值

    需求1:点击所有报表模板时,server端返回所有报表模板的ID(templateId),测试时需要下载某个模板生成的报表 需求2:点击单个报表模板时,server端返回这个报表模板下的所有报表ID( ...

  5. 《C#微信开发系列(4)-接收 / 返回文本消息》

    4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息 ...

  6. C# Socket 发送&接收&返回

    因为工作比较忙,好久没有写过博客了,最近因项目需求,需要用到Socket来进行通信,简单写了几个例子,记录一下,代码很简单,无非就是接收与发送,以及接收到数据后返回一个自定义信息,也可以说是发送. 先 ...

  7. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

  8. jquery序列化form表单使用ajax提交后处理返回的json数据

    1.返回json字符串: /** 将一个字符串输出到浏览器 */ protected void writeJson(String json) { PrintWriter pw = null; try ...

  9. jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)

    1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...

随机推荐

  1. FFMPEG 库移植到 VC 需要的步骤

    在VC下使用FFMPEG编译好的库,不仅仅是把.h,.lib,.dll拷贝到工程中就行了,还需要做以下几步.(此方法适用于自己使用MinGW编译的库,也同样适用于从网上下载的编译好的库,例如http: ...

  2. SwipeRefreshLayout的简要说明及使用demo

    在最新的  Android Support Library, revision 19.1.0 (March 2014)   添加了SwipeRefreshLayout控件. 版本发布的说明信息如下: ...

  3. java运用FFMPEG视频转码技术

    基于windows系统安装FFMPEG转码技术 http://wenku.baidu.com/link?url=z4Tv3CUXxxzLpa5QPI-FmfFtrIQeiCYNq6Uhe6QCHkU- ...

  4. UVA 10054 The Necklace

    完全就是哭瞎的节奏···QAQ 又是图论··· 题意:有一种项链,每个珠子上有两种颜色,相同颜色的两颗珠子的两头相连,如果能连成环输出珠子的顺序,不能连成环输出"some beads may ...

  5. gitlab的使用

    Gitlab的使用 最近成功的在公司部署了gitlab,鉴于同学们还不会使用,这里写篇博客说明下.如果想安装gitlab的话,需要一些linux的基础知识,我在这里记录了我安装的参考<http: ...

  6. 1、ListView自定义控件下拉刷新(一)

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...

  7. SQL你必须知道的-函数及类型转换

    use MySchoolTwo    --ISNULL(expression,value) :如果 expression不为空则返回 expression ,否则返回 value.    select ...

  8. nginx配置:location配置方法及实例详解

    今天深入研究了下nginx的location的用法,已经一些需要注意的细节,现在做一个归纳总结,以备后面查询. location匹配的是nginx的哪个变量? $request_uri locatio ...

  9. sgu 176 Flow construction(有源汇的上下界最小流)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11025 [模型] 有源汇点的上下界最小流.即既满足上下界又满足 ...

  10. HDU4553 约会安排

    http://www.mamicode.com/info-detail-422707.html 线段树区间覆盖,开两个线段树,一个记录DS,一个NS // #pragma comment(linker ...