20070611--ASP.NET AJAX深入浅出系列课程(5):客户端访问WebService(中):参数类型的序列化与反序列化
教学材料ASP。NET AJAX

4.5网站开发实例教程
第10章 AJAX
第6页
10.2 ScriptManager控件
ScriptManager控件是 AJAX 的核心, 它提供处理页面上的所有 AJAX控件 (UpdatePanel、UpdateProgress等)的支持,没 有该控件的存在其他 AJAX控件是不能 工作的,并且所有需要支持 AJAX的 页面上只能有一个ScriptManager控件。
说明
4.5网站开发实例教程
第10章 AJAX
第13页
同页面上使用多个UpdatePanel
使用UpdatePanel的时候并没有限制在一个页面 上用多少个UpdatePanel,所以可以为不同的需 要局部更新的页面区域加上不同的UpdatePanel。 由于UpdatePanel默认的UpdateMode是Always, 如果页面上有一个局部更新被触发,则所有的 UpdatePanel都将更新,有时这是程序员不愿看 到的。这时只需要UpdatePanel在它自己的触发 器触发的时候更新就可以了,所以需要把 UpdateMode设置为Conditional。
4.5网站开发实例教程
第10章 AJAX
第15页
UpdatePanel异步更新中的错误 处理
当发生UpdatePanel控件异步更新错误时,默认 情况下会弹出一个错误对话框。如果设计者觉得 不符合用户习惯,可以通过ScriptManager控件 的OnAsyncPostBackError 事件和 AsyncPostBackErrorMessage属性捕捉和设置 回传时的错误消息。
4.5网站开发实例教程
第10章 AJAX
第16页
主要内容
ASP NET中使用AJAX的教程

使用AJAX的教程(一)本文所描述的使用AJAX的方法非常简单,而且效率很高。
同时这种方法还非常容易维护,并且开发人员无需任何的特殊技巧就可以实现它,而且使用这种方法还可以跨浏览器。
一个基本的AJAX实现需要两个主要部分:一个使用JavaScrip t代码编写的客户端HTML页,这些JavaScript用来向服务端发送请求和接收响应;一个可以接收请求和向客户端发送响应信息的远程页面。
客户端的JavaScript代码的任务是建立一个XmlHttp对象,然后向服务端发送请求信息,最后通过回调方式处理服务端返回的响应信息。
这一切都是由JavaScript代码实现的。
本文的例子使用程序实现,在实现上要做到以下几点:1、AJAX可以在不同的页上向不同的服务端页发送请求。
2、远程页面URL可以包含动态可计算的参数,这样做可以在A 的后端代码中更方便地建立URL字符串。
3、远程页在更新HTML页之前可以使用复杂的数据进行响应,这也可以由的后端代码完成。
4、一个服务端页面可以是一个扩展的第三方的页面,也可以是本身的web页或服务。
以上的几点如图1所示图1二实现基本的AJAX JavaScript方法我将JavaScript方法分成两部分:调用特殊页的JavaScript方法和一般的JavaScript方法。
特殊的方法包括一个回调方法,它的作用是更新页面内容。
而其它的AJAX方法负责建立一个XmlHttp对象,并向服务端发出一个异步的HTTP请求。
建立的XmlHttp对象因客户端浏览器的不同而有所差异。
本文只考虑两种浏览器:一个是Microsoft的IE系列浏览器;另一个是Moz illa系列浏览器,包括Mozilla Firefox、Netscape和Safari。
我也在Opera浏览器上测试过,但我不能保证本文的代码可以很好地运行Opera浏览器上。
下面是如何建立XmlHttp对象的代码:funct ion Get XmlHt t pObject(handler){var objXmlHt t p = null;if (!window.XMLHtt pRequest){// Mic rosoftobjXmlHt t p = Get MSXmlHt t p();if (objXmlHt t p != null){objXmlHt t p.onreadyst at echang e = handler;}}else{// Mozilla | Net scape | SafariobjXmlHt t p = new XMLHtt pRequest();if (objXmlHt t p != null){objXmlHt t p.onload = handler;objXmlHt t p.onerror = handler;}}ret urn objXmlHt t p;}funct ion Get MSXmlHt t p(){var xmlHt t p = null;var c lsids = ["Msxml2.XMLHT T P.6.0","Msxml2.XML HT TP.5.0","Msxml2. XMLHT TP.4.0","Msxml2.XMLHT T P.3.0","Msxml2.XML HT T P.2.6","Mic rosoft.XMLHTT P.1.0","Mic rosoft.XMLHTT P.1","Mic rosoft.XMLHTT P"];for(var i=0; i<c lsids.lengt h && xmlHt t p == nu ll; i++) { xmlHt t p = Creat eXmlHt t p(c lsids[i]);}ret urn xmlHt t p;}funct ion Creat eXmlHt t p(c lsid) {var xmlHt t p = null;t ry {xmlHt t p = new Act iveXObject(c lsid);lastc lsid = c lsid;ret urn xmlHt t p;}c atc h(e) {}}由于MSXML5只是为Office设计的,因此,我们可以不考虑M SXML5。
ASP.NET中使用Ajax的方法

中使⽤Ajax的⽅法$.ajax向普通页⾯发送get请求这是最简单的⼀种⽅式了,先简单了解jQuery ajax的语法,最常⽤的调⽤⽅式是这样:$.ajax({settings}); 有⼏个常⽤的setting,全部参数及其解释可以去jQuery官⽅API⽂档查询1. type:请求⽅式 get/post2. url:请求的Uri3. async:请求是否为异步4. headers:⾃定义的header参数5. data:发往服务器的参数6. dataType:参数格式,常见的有string、json、xml等7. contents:决定怎样解析response的⼀个”字符串/正则表达式” map8. contentType:发送到服务器的额数据的内容编码类型,它的默认值是"application/x-www-form-urlencoded; charset=UTF-8""。
9. success:请求成功后调⽤的句柄10.error:请求失败后调⽤的句柄没使⽤过jQuery的ajax话这样看有些云⾥雾⾥的感觉,来看⼀个简单例⼦⾸先使⽤Visual Studio新建⼀个WebApplication,把jQuery.js引⼊project,然后添加两个页⾯,Default.aspx作为测试⽤Default.aspx复制代码代码如下:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Web.Default" %><!DOCTYPE html ><html><head runat="server"><title>Ajax</title><script src="jQuery.js" type="text/javascript"></script><style type="text/css">html, body, form{width: 100%;height: 100%;padding: 0px;margin: 0px;}#container{margin: 100px;height: 300px;width: 500px;background-color: #eee;border: dached 1px #0e0;}</style></head><body><form id="form1" runat="server"><div id="container"><input type="button" value="Test Ajax" onclick="testGet()" /><br /></div><script type="text/javascript">function setContainer(text) {document.getElementById("container").innerHTML += ('<br/>' + text);function testGet() {$.ajax({type: 'get',url: 'NormalPage.aspx',async: true,success: function (result) {alert(result);},error: function () {setContainer('ERROR!');}});}</script></form></body></html>NormalPage.aspx作为请求页⾯,先不做任何处理。
ASP.NETAJAX控件使用概述

AJAX控件使用概述一、 AJAX 控件概述借助 AJAX 控件,使用很少的客户端脚本或不使用客户端脚本就能创建丰富的客户端行为,如在异步回发过程中进行部分页更新(在回发时刷新网页的选定部分,而不是刷新整个网页)和显示更新进度。
异步部分页更新可避免整页回发的开销。
ScriptManager 控件为启用了 AJAX 的 网页管理客户端脚本。
ScriptManagerProxy 控件允许内容页和用户控件等嵌套组件在父元素中已定义了 ScriptManager 控件的情况下将脚本和服务引用添加到网页。
Timer 控件在定义的时间间隔执行回发。
如果将Timer 控件和UpdatePanel 控件结合在一起使用,可以按照定义的间隔启用部分页更新。
您还可以使用 Timer 控件来发布整个网页。
UpdatePanel 控件可用于生成功能丰富、以客户端为中心的Web 应用程序。
通过使用UpdatePanel 控件,可以执行部分页更新。
UpdateProgress 控件提供有关 UpdatePanel 控件中的部分页更新的状态信息。
所有 AJAX 控件都需要web.config 文件中的特定设置才能正常运行。
如果您试图使用这些控件之一,但您的网站不包含所需的 web.config 文件,则网页的“设计”视图中本应显示该控件之处会出现错误。
在“设计”视图中,如果您单击处于该状态的控件,则Microsoft Expression Web 会让您选择要新建一个 web.config 文件还是更新现有的 web.config 文件。
二、ScriptManager 控件ScriptManager 控件为启用了 AJAX 的 网页管理客户端脚本。
默认情况下,ScriptManager 控件会向网页注册Microsoft AJAX Library 的脚本。
这样,客户端脚本就能使用类型系统扩展插件,还能支持部分页呈现和 Web 服务调用之类的功能。
20070802--ASP.NET AJAX深入浅出系列课程(11):Microsoft AJAX Library中异步通信层使用

Microsoft AJAX Library中异步通信层使用赵劼MSDN特邀讲师jeffz@本次课程内容包括•Microsoft AJAX Library的异步通信层–概念–组成•使用XMLHttpRequest对象发出AJAX请求•使用Microsoft AJAXLibrary的异步通信层–发出AJAX请求–相关事件等成员收听本次课程需具备的条件•了解JavaScript编程•拥有AJAX开发基础Level 200MS AJAX LIB的客户端架构MS AJAX LIB的通讯什么是异步通讯层•Microsoft AJAX Library的组成部分之一•负责 AJAX框架中所有的客户端与服务器端的通信•其默认实现封装了XMLHttpRequest的功能–可以自定义异步通讯层的通信方式–自定义方式在下次课程中介绍DEMO1使用XMLHttpRequest发出AJAX请求MS AJAX LIB异步通讯层的组成•均在命名空间下•WebRequest类–负责收集(存储)请求信息•WebRequestExecutor类–负责发送请求–反馈服务器端回复的结果•WebRequestManager类–用于管理异步通讯层与服务器端的通信WebRequest类成员•事件:–completed:得到回复之后触发•方法:–completed:引发completed事件–getResolvedUrl:获得完整的URL –invoke:执行(发送)请求WebRequest类成员•属性:–body:发送到服务器的请求内容–executor:发送请求的Executer对象–headers:请求的头信息集合–httpVerb:请求所用的HTTP方法–timeout:超时时间–url:请求的URL–userContext:附加于WebRequest的对象WebRequestExecutor类成员•方法:–abort:取消当前请求–executeRequest:执行请求–getAllResponseHeaders:获取回复内所有的头信息–getResponseHeader:获取回复内指定的头信息WebRequestExecutor类成员•属性:–aborted:表示请求是否被取消–responseAvailable:表示是否得到了正确的结果–responseData:获得字符串形势的回复内容–started:表示请求是否已经开始–statusCode:表示回复状态的代码–statusText:表示回复状态的文字–timedOut:表示回复是否是超时状态–xml:获得xml形式的回复内容–webRequest:获得当前正在执行的WebRequest对象DEMO2使用异步通信层WebRequestManager的成员•事件–invokingRequest:即将发出请求时触发,可用于取消某个请求。
浅谈Ajax在ASP[1].Net中的使用
![浅谈Ajax在ASP[1].Net中的使用](https://img.taocdn.com/s3/m/a663e706de80d4d8d15a4f32.png)
Ajax在应用中使用有3个部分(个人观点):1.数据(一般通过IE内置组件Microsoft.XMLHTTP来取得或者发送数据);2.事件(事件指的是客户端事件,如果是服务端事件,那么AJAX也就没什么意义了);3.绑定(暂且就叫绑定吧,也可以说是显示,一般通过DHTML来完成)。
从上面看,Ajax就使用了Microsoft.XMLHTTP组件和DHTL。
其实还有另外一部分,就是服务器端的处理。
一、简单示例就最简单的原型来说,就是取得数据:a.aspx的内容如下:< div id="MyShow"/>< script language="Java Script">var xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");//数据传输,flase为非异步方式xmlhttp.open("GET","a.aspx",true);xmlhttp.onreadystatechange=function() {if (xmlhttp.readyState==4) {MyShow.InnerText = xmlhttp.responseText;}if (xmlhttp.readyState==3) {MyShow.InnerText = ('正在提交数据');}}xmlhttp.send(null);}< /script>a.aspx提供数据xmlhttp.open("GET","a.aspx",true);就是请求a.aspx当异步请求完成时,用DHML改变MyShow的内容。
二、GET方法更改a.aspx如下:把b.aspx中xmlhttp.open("GET","a.aspx",true);改成xmlhttp.open("GET","a.aspx?flag=1",true);则得到数据11111111111111xmlhttp.open("GET","a.aspx",true);改成xmlhttp.open("GET","a.aspx?flag=2",true);则得到数据22222222222222三、POST方法如果有这样一个表单用AJAX就是< div id="MyShow"/>< script language="Java Script">var xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");//数据传输,flase为非异步方式xmlhttp.open("Post","a.aspx",true);xmlhttp.onreadystatechange=function() {if (xmlhttp.readyState==4) {MyShow.InnerText = xmlhttp.responseText;}if (xmlhttp.readyState==3) {MyShow.InnerText = ('正在提交数据');}}xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlen coded");xmlhttp.send("p1=qwdqwdqwdqwd"); //这里是POST要提交的数据。
ASP.NET AJAX ppt课件

ppt课件 4
12.1.1 AJAX概述
AJAX技术将桌面应用程序具有的交互性应用于Web应 用程序 AJAX所用到的技术包括:
XMLHttpRequest对象:
该对象允许浏览器与Web服务器通信,通过MSXML ActiveX组件 可以在IE5.0以上的浏览器中使用。
JavaScript代码:
3
12.1 AJAX基础
AJAX是Asynchronous JavaScript and XML的 缩写,是一种利用已经成熟的技术构建具有良 好交互性的Web应用程序的好方法。通常称 AJAX页面为无刷新Web页面。 AJAX是AJAX的Microsoft实现方式, 对AJAX的使用以控件形式提供,提高了易用 性。 AJAX 1.0以单独下载的形式发布, 可以在 2.0之上安装。从.NET Framework 3.5开始,不再需要下载和安装单 独的 AJAX。
ppt课件
13
12.2.1 ScriptManager控件
中AJAX功能的核心,管理一个页面 上的所有 AJAX资源。包括将 Microsoft AJAX库的JavaScript脚本下载到浏 览器和协调通过使用控件UpdatePanel启用的 局部页面刷新。 每个实现AJAX功能的页面都需要添加一个 ScriptManager控件。语法格式如下:
第12章 AJAX
ppt课件
1
PHP中AJAX的使用(完整实例【大牛可飘过】)

PHP中AJAX的使⽤(完整实例【⼤⽜可飘过】)有⼀段时间不写关于AJAX的东西了,最近和同学参加个⽐赛,要做⼀个类似博客的东西,⽤到了AJAX的东西,在写东西之前为了再熟悉⼀下AJAX,⾃⼰做了个关于AJAX的⼩事例与⼤家分享⼀下。
AJAX在js⾥可谓是⼀个⽜⽓冲天的⼀个词,我刚学的时候有点望名⽣畏。
对于初学者来说AJAX看似很难,图书馆⾥有些关于AJAX的教程⽐板砖都厚,看了就不想学。
但当你真正长⽤的东西其实就那么写。
在这就不扯那些书上扯的AJAX的历史考古的淡了,不然的话会碎的,你懂的。
OK直⼊正题。
在这呢我主要说⼀下AJAX的⽤法,原理就不多说了。
1.你要⽤AJAX⾸先得会js吧,这个不⽤多说。
⾸先你得NEW⼀个AJAX的对象,类必须得事例化才能使⽤,这个⼤家都知道对吧 第⼀步:var oAjax = new XMLHttpRequest(); 但是为了兼容IE6这么蛋疼的浏览器⼀般这么写: if(window.XMLHttpRequest) { var oAjax = new XMLHttpRequest(); } else { //IE var oAjax=new ActiveXObject("Microsoft.XMLHTTP"); } 到这为⽌对象就事例化好了。
2.第⼆步咱得给服务器连接起来吧,这是必须的啊; ⽤open();⽤法是这样的:open(传输⽅式,⽂件地址,同步还是异步(默认异步)) oAjax.open('get','ajax.php?hehe='+sValue,true); 3.得发送请求吧: oAjax.send(); 4.就是接收返回值了,就不废话了,直接看代码吧: oAjax.onreadystatechange=function() { //oAjax.readyState 记录步骤 if(oAjax.readyState == 4) { if(oAjax.status == 200) { oDiv.innerHTML = oAjax.responseText; } else { alert("失败"); } } else { alert(oAjax.readyState);//记录步骤 } } 到此为⽌AJAX就OK了:下⾯是我实验的完整事例:html代码如下:1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns="/1999/xhtml">3 <head>4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />5 <title>⽆标题⽂档</title>6 <script type="text/javascript">7 window.onload=function()8 {9 var oBtn1=document.getElementById('btn1');10 var oInput=document.getElementById("hehe");11 var oDiv=document.getElementById("div1");12 oBtn1.onclick=function()13 {14 var sValue=oInput.value;15 //alert(sValue);16 //1.创建Ajax对象17 //只兼容⾮IE6的浏览器18 if(window.XMLHttpRequest)19 {20 var oAjax=new XMLHttpRequest();21 }22 else23 {24 //IE625 var oAjax=new ActiveXObject('Microsoft.XMLHTTP');26 }27 //alert(oAjax);28 //2.连接服务器29 //open(传输⽅式,⽂件地址,同步还是异步(默认异步))30 oAjax.open('get','ajax.php?hehe='+sValue,true);3132 //3.发送请求33 oAjax.send();3435 //4.接收返回36 oAjax.onreadystatechange=function()37 {3839 //oAjax.readyState 记录步骤40 if(oAjax.readyState == 4)41 {42 if(oAjax.status == 200)43 {44 oDiv.innerHTML = oAjax.responseText;45 }46 else47 {48 alert("失败");49 }50 }51 else52 {53 alert(oAjax.readyState);//记录步骤54 }55 }56 //oAjax.send();5758 }59 }60 </script>61 </head>6263 <body>64 <form method="" action="ajax.php">65 呵呵:<input type="text" size=20 name="hehe" id="hehe">66 <input type="button" value="提交" id="btn1">67 </form>68 <div id="div1">69 </div>70 </body>71 </html>后台PHP代码ajax.php1 <?php2 $hehe=$_GET['hehe'];3 echo $hehe;4 ?>简单的AJAX⽤法事例到此为⽌,特为初学者⽽写,⼤⽜可飘过……。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
客户端访问WebService(中)参数类型的序列化与反序列化
赵劼
MSDN特邀讲师
jeffz@
本次课程内容包括
•复杂参数类型基本使用方式
•生成复杂参数类型的客户端代理
•客户端代理的作用
•使用JavaScriptConverter
•自定义JavaScriptConverter
• AJAX的序列化与反序列化能力
收听本次课程需具备的条件
•了解.NET Framework开发
•熟悉JavaScript开发
•了解客户端访问Web Service基础Level 200
复杂参数的基本使用方式
•作为参数的类型一定要有默认的构造函数–编译器自动生成默认的构造函数
–手动编写默认的构造函数
•客户端设置类型共有的域变量及属性–设置的属性必须有Setter方法
•使用JSON进行传输格式
•自动进行序列化与反序列化
DEMO1
复杂参数的基本使用方式
生成复杂参数类型的客户端代理
•使用GenerateScriptTypeAttribute标记要生成代理的参数类型
•可以标记在类、接口以及方法上
•生成的代理中将包括客户端类型的代理•调用方法时可以创建“具体类型”
–new [Namespaces].ClassName()
–没有其他构造方法(构造函数)
DEMO2
生成复杂参数类型的客户端代理
客户端代理的作用
•在对象里做了一个标记
–“__type”= “ComplexType.Color”
•服务器端根据标记选择反序列化的目标类型
•可出现“多态”效果
DEMO3
客户端代理的作用
使用JavaScriptConverter
•复杂类型作为返回值时可能会出现问题–循环引用
•解决方案
–使用自定义数据类型封装复杂类型
–在web.config里定义Converter
DEMO4
使用JavaScriptConverter
自定义JavaScriptConverter
•用于处理复杂类型
–处理循环引用
–简化默认的复杂序列化和反序列化行为
•定义并使用一个JavaScriptConverter –定义一个Converter继承JavaScriptConverter类–实现SupportedTypes
–实现Serialize方法用于序列化复杂数据
–实现Deserialize方法用于反序列化复杂数据
–在web.config内注册该Converter
DEMO5
自定义JavaScriptConverter
序列化与反序列化能力•JavaScriptConverter:自定义序列化与反
序列化能力
•JavaScriptTypeSolver:建立数据类型与标识符的映射
•不是真正的JSON序列化
–时间日期对象
–Sys.Serialization.JavaScriptSerializer
序列化与反序列化能力(Cont.)
•JavaScriptSerializer类
–RegisterConverters
•注册在web.config中的Converter只能用于
WebService访问中
–ConvertToType<>:
–Deserialize<>
–DeserializeObject
–Serialize
DEMO6
序列化与反序列化能力
获取更多MSDN资源
•MSDN中文网站
/china/msdn
•MSDN中文网络广播
•MSDN Flash
/china/newsletter/case/ msdn.aspx
•MSDN开发中心
/china/msdn/Developer Center/default.mspx
Question & Answer
如需提出问题,请单击“提问”按钮并在随后显示的浮动面板中输入问题内容。
一旦完成问题输入后,请单击“提问”按钮。