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