【发布时间】:2010-12-22 14:58:10
【问题描述】:
我对使用带有ajax调用的scriptmanager或使用JQuery直接调用webmethods的好处或conc有点困惑。
有人可以就这个问题给我一些提示吗?什么时候用哪个?处理 JSON 有什么不同吗?
【问题讨论】:
标签: asp.net javascript jquery ajax json
我对使用带有ajax调用的scriptmanager或使用JQuery直接调用webmethods的好处或conc有点困惑。
有人可以就这个问题给我一些提示吗?什么时候用哪个?处理 JSON 有什么不同吗?
【问题讨论】:
标签: asp.net javascript jquery ajax json
我认为MSDN ScriptManager control page 很好地总结了这些功能 -
注册与部分页面更新兼容的脚本。
为了管理依赖 在你的脚本和核心之间 库,您注册的任何脚本 在 Microsoft AJAX 之后加载 库脚本。
指定是否将发布或调试脚本发送到浏览器。
通过注册 Web 从脚本提供对 Web 服务方法的访问 使用 ScriptManager 服务 控制。
提供对 ASP.NET 身份验证、角色和配置文件的访问权限 来自客户端的应用程序服务 通过注册这些服务来编写脚本 使用 ScriptManager 控件。
启用 ECMAScript (JavaScript) 日期的文化特定显示, 数字和字符串函数 浏览器。
访问嵌入脚本文件的本地化资源或 使用独立的脚本文件 ResourceUICultures 的属性 ScriptReference 控件。
注册实现 IExtenderControl 或 IScriptControl 与 ScriptManager 控制使脚本 客户端组件所需的和 行为被渲染。
基本上,ScriptManager 会按照它说的去做,管理您的脚本,而无需您过多担心自己编写 JavaScript“胶水”来完成它。
当然,包含 ScriptManager 控件会产生(有些人可能会说很大)开销,尤其是对脚本资源的额外请求数量以及生成的用于调用 Web 服务和页面方法的代理类的大小。与开发 Internet 应用程序相比,在开发带宽和网络速度可能不是问题的 Intranet 应用程序时,这可能不是那么重要,但要注意这一点很重要。
如果您对能够替换 ScriptManager 的所有功能同时重量更轻且完成工作速度更快的 JavaScript 库感到满意,那么这听起来是一个不使用 ScriptManager 的好案例。
在处理 JSON 方面,jQuery 和 ScriptManager 都处理得很好。 IIRC,JSON 是 .NET 中页面方法和 Web 服务的默认数据类型(尽管有些事情提醒我并非总是如此)。
【讨论】:
WRT Ajax 调用?很少。 非常非常少。与 jQuery 相比,ASP.NET AJAX 框架有一些可能的好处:
语法。该框架允许您使您的 Web 服务调用看起来像您真的在调用某个本地方法并为其传递参数:
MyNamespace.MyWebservice.MyMethod('arg1value', 'arg2value', onResult);
注意框架版本如何知道 Web 服务方法的参数顺序。
jQuery 的.ajax 需要设置管道以调用 ASP.NET AJAX Web 服务方法。它是最小的,关于fairly 的博客。 well:
$.ajax({
type: "GET",
url: "MyWebservice.asmx/MyMethod",
data: '{"arg1":"arg1value","arg2":"arg2value"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
onResult(data.d) // ASP.NET returns payload in `".d"` property
}
});
JSON 序列化 用于将 args 传递给 Web 服务:ASP.NET Ajax 框架具有 Sys.Serialization.JavaScriptSerializer.serialize,它负责“在幕后”序列化 Web 服务参数的工作。只有 jQuery 可能必须包含第三个库,例如 json.org 的 JSON.stringify1。这是可以忽略不计的。
硬编码 GET 和 POST 请求类型。由于框架为您从 WebService 类定义中生成了一个 JavaScript 客户端代理,因此您通常不知道(或关心)客户端中的 HTTP 请求方法是什么。您只需在 Web 服务类的 ScriptMethod 属性中设置它并从客户端调用它。对于 jQuery,您必须知道它才能将其作为 type 选项传递给 .ajax。
至于非 Ajax 的好处,@Russ Cam 已经为你总结了。
【讨论】: