jQuery 结合 Json 提交数据到Webservice,并接收从Webservice返回的Json数据

简单的Json数据提交 

jQuery ajax  webservice:get 和 post

一、GET 方式
客户端
ExpandedBlockStart.gif代码
            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);  // 错误处理
                }
            }); 

 

服务器端
ExpandedBlockStart.gif代码
     [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 方式
客户端
ExpandedBlockStart.gif代码
            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); // 错误处理
                }
            });

 

服务器端
ExpandedBlockStart.gif代码
     [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对象,应该怎么做呢? 
比如我要提交下面的数据:
客户端:

 

ExpandedBlockStart.gif代码
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,写一个辅助类:

ExpandedBlockStart.gif代码
    /// <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、因为要反序列化成相应的对象,所以先构造两个对象类,注意每个类和类的字段前面的特性修改符:

ExpandedBlockStart.gif代码
    [DataContract]
    
public class MProductProperty
    {
        [DataMember(Order 
= 0, IsRequired = true)]
        
public int ProductId { setget; }
        [DataMember(Order 
= 1, IsRequired = true)]
        
public List<MProperty> PropertyList { setget; }
    }
    
public class MProperty
    {
        [DataMember(Order 
= 0, IsRequired = true)]
        
public int PropertyId { setget; }
        [DataMember(Order 
= 1, IsRequired = true)]
        
public string PropertyType { setget; }
        [DataMember(Order 
= 2, IsRequired = true)]
        
public string PropertyValue { setget; }
    }

 


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

ExpandedBlockStart.gif代码
        [WebMethod]
        [ScriptMethod(UseHttpGet 
= true)]
        
public string PostProductPropertyList()
        {
            
string jsonString = HttpContext.Current.Request["propertyList"];
            var productProperty 
= JsonHelper.JsonDeserialize<MProductProperty>(jsonString); // productProperty 成功反序列化成MProductProperty的对象
            
//返回接收成功标识
            return "postsuccess";
        }

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yangjunwl/archive/2011/02/17/1957256.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html服务器框架,一种类似http/html的分布式GUI程序设计框架

笔者构想了一种类似http/html的分布式GUI程序设计框架&#xff0c;适用于WIndows、桌面Linux、Mac OS以及C&#xff0c;Java&#xff0c;Python等多种支持GUI编程的程序设计系统。但是对于手机小屏幕&#xff0c;可能不合适。本系统包括窗口描述规则;gui.exe -- 一个命令行程序…

X86逆向教程10:学会使用硬件断点

本节课我们将学习硬件断点的使用技巧&#xff0c;硬件断点是由硬件提供给我们的一组寄存器&#xff0c;我们可以对这些硬件寄存器设置相应的值&#xff0c;然后让硬件帮我们断在需要下断点的地址上面&#xff0c;这就是硬件断点&#xff0c;硬件断点依赖于寄存器&#xff0c;这…

PHP获取IP的多种方式解析

转自&#xff1a;http://developer.51cto.com/art/200911/164514.htm PHP获取IP的方法有许多种&#xff0c;我们今天向大家总结了六种方法&#xff0c;希望通过对这六种方法的学习&#xff0c;能够加深我们对PHP语言的进一步了解&#xff0c;巩固我们所掌握的知识。 PHP获取IP方…

html 监控键盘,后台监控鼠标和键盘(可监听全局的鼠标以及键盘按键)

资源下载此资源下载价格为3D币&#xff0c;请先登录资源文件列表MouseKeyboardLibrary/MouseKeyboardLibrary/app.config , 134MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/MouseKeyboardLibrary.exe , 23040MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/Mo…

SQL优化34条

我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习、摘录、并汇总部分资料与大家分享&#xff01;&#xff08;1&#xff09; 选择最有效率的表名顺序(只在基于规则的优化器中有效)&#xff1a;ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名&#xff…

POJ 3258 River Hopscotch

题目链接&#xff1a;https://vjudge.net/problem/POJ-3258 题目大意 给定数轴上一个起点 0&#xff0c;终点 L&#xff0c;以及中间 N 个不同的点&#xff0c;现准备删除中间 N 个点中的 M 个&#xff0c;使得剩下来的点&#xff08;包括起点和终点&#xff09;&#xff0c;相…

2021泉州高考学校成绩查询,2021泉州市地区高考成绩排名查询,泉州市高考各高中成绩喜报榜单...

距离2018年高考还有不到一个月的时间了&#xff0c;很多人在准备最后冲刺的同时&#xff0c;也在关心高考成绩。2018各地区高考成绩排名查询,高考各高中成绩喜报榜单尚未公布&#xff0c;下面是往年各地区高考成绩排名查询,高考各高中成绩喜报榜单&#xff0c;想要了解同学可以…

转载:CEO如何“养好CIO同时管好CIO”?

http://www.enet.com.cn/article/2010/1214/A20101214800028.shtml 在现代企业经营理论中&#xff0c;有个着名的“二八定律”&#xff0c;即人才对企业贡献而言&#xff0c;常常是20%的人做出了80%的企业效益。显而易见&#xff0c;这“20%”就是企业的骨干与核心。而这“20%”…

PL/SQL中模拟EBS上下文

有时&#xff0c;我们需要查询的表或视图&#xff0c;是具有OU屏蔽的&#xff0c;这时我们就需要模拟EBS中的上下文来实现查询数据。 BEGIN fnd_global.apps_initialize(user_id >1,resp_id > 2,resp_appl_id >3); mo_global.init(ONT); END; 上述参数的获取&#xff…

[html] 一般习惯把js写在</body>前,但有例外的情况吗?说说看

[html] 一般习惯把js写在前&#xff0c;但有例外的情况吗&#xff1f;说说看 js的放置位置有三种&#xff1a; &#xff08;1&#xff09;放在head标签内 &#xff08;2&#xff09;放在body标签内 &#xff08;3&#xff09;外部script个人简介 我是歌谣&#xff0c;欢迎和大…

计算机桌面设计总结及体会,计算机基础学习心得

计算机基础学习心得 相关内容:计算机硬件是指计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。下面是第一范文网带来的计算机硬件实习心得体会&#xff0c;欢迎欣赏。计算机硬件实习心得体会一&#xff1a;一、实习目的&#xff1a;1、练习和巩固识别…

POJ 2676 Sudoku【DancingLinks,数独】

http://poj.org/problem?id2676POJ 2676 Sudoku也是求解规模为9*9的数独问题&#xff0c;与POJ 3074 Sudoku相同的问题&#xff0c;只是修改了输入输出格式而已。。。所以也不废话了&#xff0c;嘿嘿。。。 #include<stdio.h> #include<string.h> const int MAX_C…

Unittest方法 -- 测试固件(TestFixture)

前置和后置 1.setUp&#xff1a;在写测试用例的时候&#xff0c;每次操作其实都是基于打开浏览器输入对应网址这些操作&#xff0c;这个就是执行用例的前置条件。2.tearDown&#xff1a;执行完用例后&#xff0c;为了不影响下一次用例的执行&#xff0c;一般有个数据还原的过程…

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写?

[html] 如何关闭HTML页面在IOS下的键盘首字母自动大写&#xff1f;&#xff1f; autocapitalize"none"或"off"个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一…

所谓语音合成 是计算机根据语言学,计算语言学完整1

计算语言学第一节计算语言学概说概念&#xff1a;计算语言学(computational linguistics)是用计算机研究和处理自然语言的一门新兴边缘学科。涉及语言学、计算机科学、数学等多个领域。旨在通过建立形式化的数学模型&#xff0c;来分析处理自然语言&#xff0c;并在计算机上用程…

再深入 HTTP Referer【转】

简言之&#xff0c;HTTP Referer是header的一部分&#xff0c;当浏览器向web服务器发送请求的时候&#xff0c;一般会带上Referer&#xff0c;告诉服务器我是从哪个页面链接过来的&#xff0c;服务器籍此可以获得一些信息用于处理。 比如从我主页上链接到一个朋友那里&#xff…

剑指:树的子结构

题目描述输入两棵二叉树 A、B&#xff0c;判断 B 是不是 A 的子结构。 我们规定空树不是任何树的子结构。 样例 树 A&#xff1a; 8 / \ 8 7 / \ 9 2 / \ 4 7 树 B&#xff1a; 8 / \ 9 2 返回 true ,因为 B 是 A 的子结构。 解法递归方式遍历&#xff1a; 在树 A 中找到和树 B…

[html] 页面的重绘和回流是什么?

[html] 页面的重绘和回流是什么&#xff1f; 由于节点的几何属性发生改变或者由于样式发生改变而不会影响布局的&#xff0c;称为重绘。回流是布局或者几何属性需要改变就称为回流。回流必定会发生重绘&#xff0c;重绘不一定会引发回流。个人简介 我是歌谣&#xff0c;欢迎和…

QT中IDirect3DDevice9的Present方法失败情况的处理笔记

这几天在试着使用QT做编辑器&#xff0c;然后打算使用Irrlicht作为渲染引擎。结果在集成的时候遇到了问题。 使用了Irrlicht论坛里面有人提供的QIrrlichtWidget&#xff0c;结果什么都画不出来。仔细跟踪了一下&#xff0c;结果是IDirect3DDevice9的Present函数返回了E_FAIL。 …

html5图片长按保存,一文彻底解决HTML5页面中长按保存图片功能

$.fn.longPress function(fn) {let timeout 0;const $this this;for (let i 0; i < $this.length; i) {$this[i].addEventListener(touchstart, () > {timeout setTimeout(fn, 800); // 长按时间超过800ms&#xff0c;则执行传入的方法}, false);$this[i].addEventL…