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,一经查实,立即删除!

相关文章

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

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

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

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

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%”…

Abraca:XMMS2 的客户端

Toy Posted in AppsRSSTrackback Abraca 是基于 GTK2 而开辟的 XMMS2 音乐播放器的客户端。今后具有播放列表、音乐经管等功用。需留神的是&#xff0c;此法式要求 XMMS2、GTK 2、libglade、libnotify&#xff08;可选&#xff09;、Python 等。- Download Abraca 0.1版权声明&…

pandas plot label_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据

作者&#xff1a;Paul编者按&#xff1a; pandas提供了很多常用的数学和统计方法&#xff0c;本文中将用十分详细的例子来具体进行介绍&#xff1b;另外在许多数据分析工作中,缺失数据是经常发生的&#xff0c;将会具体介绍如何处理缺失数据。本文十分详细并实在低介绍了pandas…

2011年三八妇女节搜索引擎LOGO设计欣赏

今天是一年一度的三八国际妇女节&#xff0c;在这个特别的日子&#xff0c;烈火学院向所有女性致以节日的祝福&#xff0c;祝愿每位女同胞节日快乐&#xff0c;工作愉快&#xff01;并送上本期的搜索引擎LOGO设计欣赏&#xff0c;希望大家喜欢&#xff01; 一。百度 有作家曾说…

诺基亚2亿欧元建越南新工场

诺基亚昨天颁布发表将会在越南北部河内左近设立扶植一个新的装配厂&#xff0c;方案于2012年尾投入运用&#xff0c;初期投资达到2亿欧元&#xff0c;约合18.3亿人夷易近币。诺基亚目下当今在世界上拥有10个工场&#xff0c;新厂将会进入到诺基亚的举世制造搜集&#xff0c;为他…

Android 一直往文件写数据_( 十 ) 小众但好用:通过 Google drive 备份与同步 Keepass 数据库...

之前有提到过&#xff0c;keepass 的数据库是加密保存在本地的。而且 keepass 又是多平台免费的密码管理软件。所以如果需要实现 keepass 在多平台读取同一个数据库&#xff0c;我们需要自己搭一个服务器才怪&#xff01;搭服务器太麻烦&#xff0c;还要额外支出费用&#xff0…

mysql操作数据库

转载于:https://www.cnblogs.com/sunpxit/p/11189089.html

win7锁定计算机会断网吗,win7系统如何设置电脑定时断网

有些win7系统用户在使用电脑过程中&#xff0c;想要给电脑设置定时断网&#xff0c;但是却不知道要怎么操作&#xff0c;其实我们可以通过系统自带的任务计划功能来进行操作&#xff0c;该怎么操作呢&#xff0c;本教程就给大家讲解一下win7系统设置电脑定时断网的详细步骤。1、…

回文_Manacher算法

算法简介:算法的目的是在O(n)的时间复杂度内找到一个字符串中各个字母所在的最大长度的回文串。 此算法用到了一个Rad[]数组的定义&#xff0c;Rad[i]表示回文的半径&#xff0c;即最大的j满足str[i-j1...i] str[i1...ij]。 我们的工作就是把全部的Rad[]求出来。 有两个结论: …

linux 查当前pid_杀死僵尸进程,你需要这些神奇高效的Linux命令行

Linux 高手&#xff0c;其实都是玩儿命令行很熟练的人。命令行的学习捷径Linux 命令有许多强大的功能&#xff1a;从简单的磁盘操作、文件存取&#xff0c;到进行复杂的多媒体图像和流媒体文件的制作&#xff0c;都离不开命令行。在 Linux 的学习中&#xff0c;新手都会遇到这么…

3d000: no database selected_No.[C9]020

No.[C9]-020”Youre Not Alone&#xff0c;never alone。“别难过&#xff0c;别害怕&#xff0c;这个世界还有那么多爱你的人&#xff0c;和支持你的人&#xff0c;生活可能没有那么趁人心意&#xff0c;每个人都如此&#xff0c;别灰心&#xff0c;你并不孤单。(愿我的好朋友…

js实现树形结构化

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注小歌谣 日常分享前后端知识 前言 今天来讲一下平常我们做权限系统中的树形结构知识 就是如何把对应关系的结构数据转换为可以一个树形结构 const data [{id: 2,pid: 0,path: /course,name: Course,title: 课程管理},{id…

viewer.js实现预览效果

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注小歌谣 日常分享前后端知识 前言 最近涉及一个移动端项目 需要把其中的图片变成可预览的图片 听学弟说 可以利用viewer进行实现 首先 我们需要做的就是先写一个简单demo 先实现其中的效果 实现效果 代码 <!doct…

android 论坛_如何看待百度android吧萎靡现象与吧主的无所作为

百度android吧当初被誉为贴吧中的机锋论坛&#xff0c;现如今缺惨不忍睹&#xff0c;这一切究竟是百度资本家的阴谋还是吧主个人无所作为&#xff1f;然而就此事本人与android吧吧主展开讨论以及对其能力的质疑…这本来只是对android吧吧主随意加精普通的质问…然而该吧主却说我…

logisim优先编码器怎么用_变频电机为什么要用编码器?又该如何选型?

在自动化控制中经常会碰到各种电机的控制&#xff0c;在输送带、升降机、提升小车等较大功率的电机大部分是用变频电机&#xff0c;各个品牌PLC变频器驱动控制变频电机也很普及了。但是&#xff0c;用户经常会有这样那样的问题出现&#xff1a;变频电机为什么要装编码器?不装编…

修复计算机语言设置是哪个键,Windows语言设置后修复计算机的方法

当我们给我们的windows语音设置后&#xff0c;电脑可能会出现点问题&#xff0c;这个时候我们需要修复一下计算机&#xff0c;其中要进入BIOS的操作可能会难倒一部分新手用户&#xff0c;那么该如何操作呢&#xff1f;接下来我给大家整理了该如何一步步设置&#xff0c;一起来了…