AJax|開發指南
Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack);
function ServerSideAdd_CallBack(response){
if (response.error != null){
alert(response.error);
return;
}
alert(response.value);
}
從上面的代碼中可以看出,我們為ServerSideAdd函數增加了一個額外參數ServerSideAdd_CallBack,這個參數就是用來處理
服務器端響應的客戶端函數
。這個callback函數接受一個帶有四個關鍵屬性的response對象:
value
服務器端函數執行的返回值(可能是一個字符串、自定義對象或者dataset)
error
如果發生錯誤,則返回錯誤信息.
request
原始的XMLHttpRequest請求
context
一個上下文對象
我們首先應該檢查是否有錯誤發生,你可以通過在
服務器端函數拋出異常來實現這個error屬性
。在上面這個例子中,我們簡單的alert了一個值,就是value屬性;request屬性可以用來取得額外的信息(見下面的表格)
如果你想了解更多的關於XmlHttpRequest的知識,可以查看下面的鏈接: http://www.quirksmode.org/blog/archives/2005/02/XMLhttp_linkdum.Html
處理類型 返回一個復雜類型 AJax可以支持除了我們上面ServerSideAdd函數返回的Int值以外很多類型
。他可以直接支持integers, strings, double, booleans, DateTime, DataSets 和 DataTables,也支持簡單的自定義類型和數組
。其他的類型通過其ToString方式來返回字符串
。 返回DataSet的工作就像真正的.Net Dataset.給出一個返回DataSet的
服務端函數,我們可以通過下面的方法在客戶端顯示:
<script language="JavaScript">
//Asynchronous call to the mythical "GetDataSet" server-side function
function getDataSet(){
AJaxFunctions.GetDataSet(GetDataSet_callback);
}
function GetDataSet_callback(response){
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds.Tables != null){
var s = new Array();
s[s.length] = "<table border=1>";
for(var i=0; i<ds.Tables[0].Rows.length; i++){
s[s.length] = "<tr>";
s[s.length] = "<td>" + ds.Tables[0].Rows[i].FirstName + "</td>";
s[s.length] = "<td>" + ds.Tables[0].Rows[i].Birthday + "</td>";
s[s.length] = "</tr>";
}
s[s.length] = "</table>";
tableDisplay.innerHtml = s.join("");
}
else{
alert("Error. [3001] " + response.request.responseText);
}
}
</script>
AJax也可以支持自定義類,但是需要這個類是可以被序列化的
。如下面的類:
[Serializable()]public class User{
private int _userId;
private string _firstName;
private string _lastName;
public int userId{
get { return _userId; }
}
public string FirstName{
get { return _firstName; }
}
public string LastName{
get { return _lastName; }
}
public User(int _userId, string _firstName, string _lastName){
this._userId = _userId;
this._firstName = _firstName;
this._lastName = _lastName;
}
public User(){}
[AJaxMethod()]
public static User GetUser(int userId){
//Replace this with a DB hit or something :)
return new User(userId,"Michael", "Schwarz");
}
}