Ajax學習筆記2-用戶端訪問WebService(上)

來源:互聯網
上載者:User

一, 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不寫這些參數時,就按預設指定調用函數.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.