AJAX.NET使用者開發指南(3)

來源:互聯網
上載者:User
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");
}
}

  我們需要通過調用RegisterTypeForAjax向伺服器註冊User代理:
  • Ajax: 一個建立Web應用的新途徑
  • Ajax的錯誤處理機制探討(2)
  • Ajax的錯誤處理機制探討(1)
  • 初次體驗.NET Ajax無重新整理技術
  • Rails系統中的AJAX開發技術簡析(4)


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.