ajax|開發指南
[Ajax.AjaxMethod]
public string Test1(string name, string email, string comment){ string html = ""; html += "Hello " + name + "<br>"; html += "Thank you for your comment <b>"; html += System.Web.HttpUtility.HtmlEncode(comment); html += "</b>."; return html; } |
SessionState
在服務端函數,你可能需要接受傳送的session資訊,為了做到這一點,必須要在想實現這個方式的服務端函數的Ajax.AjaxMethod屬性上傳遞一個參數。
在查看ajax可以支援session的時候,我們先看看其他的特徵。在下面這個例子中,我們有一個文件管理系統,當一個使用者對文檔進行編輯的時候會給這個文檔加鎖,其他使用者需要等到這個文檔可用時才能修改。不使用Ajax,使用者需要不斷等待重新整理,因為不得不不斷的去檢查文檔的狀態是否為可用,這當然不是一個很好的方案。用ajax的session state支援,這就比較容易了。
我們首先寫一個函數,這個函數通過遍曆文檔ID找到使用者需要的文檔,儲存到session裡,並返回沒有佔用的文檔:
'Vb.Net
<Ajax.AjaxMethod(HttpSessionStateRequirement.Read)> _ Public Function DocumentReleased() As ArrayList If HttpContext.Current.Session("DocumentsWaiting") Is Nothing Then Return Nothing End If Dim readyDocuments As New ArrayList Dim documents() As Integer = CType(HttpContext.Current.Session("DocumentsWaiting"), Integer()) For i As Integer = 0 To documents.Length - 1 Dim document As Document = document.GetDocumentById(documents(i)) If Not document Is Nothing AndAlso document.Status = DocumentStatus.Ready Then readyDocuments.Add(document) End If Next Return readyDocuments End Function |
//C# [Ajax.AjaxMethod(HttpSessionStateRequirement.Read)] public ArrayList DocumentReleased(){ if (HttpContext.Current.Session["DocumentsWaiting"] == null){ return null; }
ArrayList readyDocuments = new ArrayList(); int[] documents = (int[])HttpContext.Current.Session["DocumentsWaiting"]; for (int i = 0; i < documents.Length; ++i){ Document document = Document.GetDocumentById(documents[i]); if (document != null && document.Status == DocumentStatus.Ready){ readyDocuments.Add(document); } } return readyDocuments; } } |
我們在屬性參數中指明了HttpSessionStateRequirement.Read(還可以是Write and ReadWrite)
下面寫javascript函數來使用這個方法帶來的結果:
<script language="javascript"> function DocumentsReady_CallBack(response){ if (response.error != null){ alert(response.error); return; }
if (response.value != null && response.value.length > 0){ var div = document.getElementById("status"); div.innerHTML = "The following documents are ready!<br />"; for (var i = 0; i < response.value.length; ++i){ div.innerHTML += "<a href=\"edit.aspx?documentId=" + response.value[i].DocumentId + "\">" + response.value[i].Name + "</a><br />"; } } setTimeout('page.DocumentReleased(DocumentsReady_CallBack)', 10000); }
</script> <body > |
頁面載入後每10秒鐘向伺服器函數請求一次。如果有返回,則call back函數檢查response,並把最新的結果顯示出來。
結論
Ajax技術可以給用戶端提供豐富的客戶體驗,而ajax.net為您容易的實現這樣強大的功能提供了可能。
- Ajax: 一個建立Web應用的新途徑
- Ajax的錯誤處理機制探討(2)
- Ajax的錯誤處理機制探討(1)
- 初次體驗.NET Ajax無重新整理技術
- Rails系統中的AJAX開發技術簡析(4)