Ajax学习笔记2客户端访问WebService(上)

一, JS访问WebServie(.Asmx)基础
1. 引用WebServie代理后,即可在输出HTML找到Type.registerNamespace('命名空间')开头的一段JS脚本,即为ScriptManager生成的客户端代理

代码段.
2. asp:ServiceReference的属性InlineScript="true"表示是否将代理缓存到页面中(HTML源码中)
3. Js函数中,arguments代表当前函数的参数集合对象;arguments.Length为参数总个数
二. JS访问PageMethod(.Aspx)基础
1. PageMethod方法服务器端限定:-只能在Aspx页面中定义-只能是公开静态方法 -使用WebMethod属性标记

-ScriptManager的EnablePageMethod属性为true,生成PageMethod代理
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
  客户端调用: PageMethods.方法名
小提示: 服务器到客户端传输日期型值是,实际传递的是(起始日期到现在的毫秒数和时区信息),在客户端Tostring()时,会自动进行时区转换.
二. Ajax错误处理
1. 调用时可以提供一个额外的错误回调函数,默认情况下不处理错误
   这里的错误: 包括错误和服务器端抛出的异常
2. 超时时间属性只能在WebService(PageMethods)级别
3. Ajax客户端错误处理类 Sys.Net.WebServiceError
   属性: timedout -是否超时;  message -错误消息;  ExceptionType 服务器端异常类型;  stackTrace -产生异常的方法
4. Ajax客户端调用WebService错误处理
function getDivision(a, b) //
{
 ErrorHandling.set_timeout(2000);  //设置超时时间
 ErrorHandling.GetDivision(a, b, null, failedCallback); //第四个参数为错误回调函数
}

function failedCallback(error)//错误回调函数
{
 var message = String.format(
  "Timeout: {0}\nMessage: {1}\nExceptionType: {2}\nStackTrace: {3}",
  error.get_timedOut(),
  error.get_message(),
  error.get_exceptionType(),
  error.get_stackTrace());
三. 复杂数据类型使用基础
1.公有属性和字段可被调用
注意事项: 窗口对象中,实现Ilist接口的对象与JS数组相对应;实现IDictionary接口的对象时,Key必须是String
 alert(message);
}
例: 字典类型传递
服务器端:
 [WebMethod]
 public IDictionary<string, Employee> GetEmployees()
 {
  Dictionary<string, Employee> result = new Dictionary<string, Employee>();

  Employee emp1 = new Employee();
  emp1.FirstName = "Jeffrey";
  emp1.LastName = "Zhao";
  emp1.Salary = 1000;
  result[emp1.FullName] = emp1;

  Employee emp2 = new Employee();
  emp2.FirstName = "Tom";
  emp2.LastName = "Chen";
  emp2.Salary = 2000;
  result[emp2.FullName] = emp2;
  return result;
 }
客户端:
   function getEmployees()
   {
    ComplexType.GetEmployees(getEmployeesSucceeded);
   }
   function getEmployeesSucceeded(result)
   {
    for (var name in result)
    {
     alert(name + ": " + result[name].Salary)
    }
   }
四. 客户端代理的使用细节
1. 函数调用完整签名  Invoke(arg1[,...argN][,成功时的回调函数][,错误时的回调函数,][,Invoke函数与回调函数之间需要传递的对象]);
2. 回调函数的完整签名  成功时回调函数名(返回结果[,Invoke函数与回调函数之间需要传递的对象][,调用的方法名]);
   失败时回调函数名(返回结果[,Invoke函数与回调函数之间需要传递的对象][,调用的方法名]);
3. WebService级别默认属性
Timeout: 超时毫秒数;
defaultUserContext: Invoke函数与回调函数之间需要传递的对象;
defaultSecceededCallBack 成功时的回调函数名;
DefaultFailedCallBack 错误时的回调函数名.
指定以上默认后,Invoke不写这些参数时,就按默认指定调用函数.

原文地址:https://www.cnblogs.com/gghxh/p/971395.html