博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ASP.NET AJAX异步调用Web Service和页面中的类方法(3):保持用户上下文
阅读量:7191 次
发布时间:2019-06-29

本文共 2291 字,大约阅读时间需要 7 分钟。

本文来自的第三章《异步调用Web Service和页面中的类方法》,请同时参考。

 

3.4 保持用户上下文

“异步”执行意味着原本从头到尾执行的函数被拦腰截断,分成了两个不同的函数。而这两个函数之间的联系往往又非常紧密,例如有些时候我们需要在后一个函数(即回调函数)中访问前一个函数中计算出来的变量,或是在后一个函数中得到前一个函数执行时的上下文等信息。特别地,若是几个不同的异步函数均提供了同一个回调函数进行处理,我们一般还要在回调函数中知道是哪个函数引发的这次回调。为了满足这些需求,程序自然产生了用户上下文的概念。

ASP.NET AJAX异步通讯层所提供的异步调用模型中同样提供了对传递用户上下文信息的支持。我们还使用一个简单的示例程序演示其具体的实现。

程序的功能并不复杂:两个按钮都将异步调用服务器端的同一个Web Service并指定同一个回调函数,取得服务器端当前时间之后显示出来,同时显示出来的还有用户点击了哪个按钮的信息。如图3-7和图3-8所示,注意其中用户上下文的不同。

clip_image002.jpg

图3-7点击第一个按钮取得服务器端当前时间

clip_image004.jpg

图3-8点击第二个按钮取得服务器端当前时间

Web Service的声明如下,返回当前服务器端时间而已:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class UserContextService : System.Web.Services.WebService
{
 
[WebMethod]
public string GetServerDateTime()
{
return DateTime.Now.ToString();
}
 
}

页面中的ScriptManager控件引用了该Web Service,以便生成其客户端调用代理:

 
 

界面元素也不复杂:前两个按钮将分别调用上面定义的Web Service;后面的id为result的<div />则用来显示调用结果:

 
onclick="return btnGetServerDateTime1_onclick()" />
 
onclick="return btnGetServerDateTime2_onclick()" />

两个按钮的click事件的处理函数如下:

function btnGetServerDateTime1_onclick() {
UserContextService.GetServerDateTime(onSucceeded, onFailed, "Button 1");
}
 
function btnGetServerDateTime2_onclick() {
UserContextService.GetServerDateTime(onSucceeded, onFailed, "Button 2");
}

注意其中粗体部分——唔,似乎前面刚刚总结出来的客户端调用Web Service代理的语法:[NameSpace].[ClassName].[MethodName](param1, param2 …, onSucceeded, onFailed)又有了新的变化:在成功回调函数和失败回调函数后面又多了一个参数,这正是本示例程序要演示的用户上下文参数,这里我们分别将其设置为“Button 1”和“Button 2”。

这样,客户端调用Web Service代理的语法就变为:

[NameSpace].[ClassName].[MethodName](param1, param2 …, onSucceeded, onFailed, userContext)

相应地,onSucceeded()回调函数的签名也有所变化,在方法返回值参数之后添加了一个代表用户上下文对象的参数。在本示例程序中,我们将这个上下文参数(即“Button 1”和“Button 2”)简单地显示出来,注意代码中的粗体部分:

function onSucceeded(result, context) {
$get("result").innerHTML =
"Current Server DateTime: " + result
+ "
User Context: " + context;
}

这样即完成了本示例程序。需要注意的是,用户上下文不仅仅可以传递字符串,就像在这个示例程序中的一样,还可以传递复杂的JavaScript对象,例如:

var contextObj = {
Name: "Dflying",
Age: 88,
DateOfBirth: new Date()
};
SomeNamespace.SomeClass.SomeMethod(param1, param2, onSucceeded,
onFailed, contextObj);

然后在onSucceeded()回调函数中,我们即可访问到传递过来的用户上下文对象:

function onSucceeded(result, context) {
var name = context.Name;
var age = context.Age;
var dateOfBirth = context.DateOfBirth;
}

转载地址:http://umtkm.baihongyu.com/

你可能感兴趣的文章
xmind8
查看>>
Filter 配置多个URL-PATTERN
查看>>
使用渐进式JPEG来提升用户体验
查看>>
2 笔经小结
查看>>
C# 操作摄像头
查看>>
maven的几个重要配置文件pom.xml、settings.xml;Maven打包生成包含所有依赖的jar包...
查看>>
ReLU为什么比Sigmoid效果好
查看>>
优秀的博客链接地址
查看>>
CentOS 配置防火墙操作实例(启、停、开、闭port)
查看>>
深入浅出 spring-data-elasticsearch - 基本案例详解(三
查看>>
Android 6.0 最简单的权限获取方法 RxPermition EasyPermition
查看>>
Linux多线程实践(四 )线程的特定数据
查看>>
openssl ca(签署和自建CA)
查看>>
在ceph中:pool、PG、OSD的关系
查看>>
Hash分析
查看>>
[精]Odoo 8.0深入浅出开发教程-模块开发基础
查看>>
在linux下的使用复制命令cp,不让出现“overwrite”(文件覆盖)提示的方法。(转)...
查看>>
推荐几篇网狐好文
查看>>
vue双向绑定的原理及实现双向绑定MVVM源码分析
查看>>
浅谈Java中的hashcode方法
查看>>