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"; }
- Java后端发出post请求带参数并接收返回的json
核心代码: 参数格式: “key1=value1&key2=value2” /*** sendUrl (远程请求的URL)* param (远程请求参数)* JSONObject ...
- [C#]Winform后台提交数据且获取远程接口返回的XML数据,转换成DataSet
#region 接口返回的Xml转换成DataSet /// <summary> /// 返回的Xml转换成DataSet /// </summary> /// <par ...
- 使用Map接收返回数据库的数据
查询返回值是map类型的一条数据 1 首先在接口中写方法 public interface EmployeeMapper { //返回一条记录的map:key就是列名,值就是对应的值 public M ...
- 【JEMTER】后置处理器JSON Path Extractor获取server端返回的json中某项值
需求1:点击所有报表模板时,server端返回所有报表模板的ID(templateId),测试时需要下载某个模板生成的报表 需求2:点击单个报表模板时,server端返回这个报表模板下的所有报表ID( ...
- 《C#微信开发系列(4)-接收 / 返回文本消息》
4.0接收 / 返回文本消息 ①接收/返回文本消息原理说明 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息 ...
- C# Socket 发送&接收&返回
因为工作比较忙,好久没有写过博客了,最近因项目需求,需要用到Socket来进行通信,简单写了几个例子,记录一下,代码很简单,无非就是接收与发送,以及接收到数据后返回一个自定义信息,也可以说是发送. 先 ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
- jquery序列化form表单使用ajax提交后处理返回的json数据
1.返回json字符串: /** 将一个字符串输出到浏览器 */ protected void writeJson(String json) { PrintWriter pw = null; try ...
- jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)
1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...
随机推荐
- apache开源项目-- Usergrid
Ed Anuff上周宣布第一版 Usergrid 的代码已经发布,Usergrid 是一款适用于移动和富客户端应用的综合性平台.Ed 认为,良好的移动性指的是将设备中运行应用的良好交互带到云中,其中既 ...
- Remove Duplicates from Sorted List I & II
Title: Given a sorted linked list, delete all duplicates such that each element appear only once. Fo ...
- 【Java】List的三种遍历方法
public void List_Test(){ List<String>list = new ArrayList<String>(); for(int i = 0;i < ...
- delphi 编译的时候 把Warning去除的方法
delphi 编译的时候 把Warning去除的方法 在 添加 {$WARNINGS OFF}
- MySQL基础之第11章 插入、更新与删除数据
11.1.插入数据 11.1.1.为表的所有字段插入数据 1.INSERT语句中不指定具体的字段名 insert into 表名 values (值1,值2…值n)2.INSERT语句 ...
- 打通ssh的方法
为了实现密码免输入,可以在安全的内网环境中打通ssh.linux和cygwin均可,步骤如下: 由A机去B机.在A生成密钥:ssh-keygen -t rsa,一路回车 将A的~/.ssh/id_rs ...
- [转] arcgis Engine创建shp图层
小生 原文 arcgis Engine创建shp图层 以创建点图层为例.首先要得到保存文件的地址. SaveFileDialog saveFileDialog = new SaveFileDialog ...
- Delphi word 颜色
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- Partitioning by Palindromes
题意: 给定一个字符串,求能分成最小几个回文串 分析:简单dp dp[i]前i个字符能分成的最小数量 dp[i]=min(dp[i],dp[j-1]+1) (j-i 是回文串) #include &l ...
- cocos2d anchor point 锚点解析
anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的.而在cocos2d中决定一个 图片的位置是由两个维度 一个 ...