應當承認我這人實在算不上弄潮兒,Ajax 早已流行得一塌糊塗,我卻始終沒有來研究一下這個東東。上次做網站的時候,BOSS 就跟我講過,可以參考一下 Ajax 的技術,我嘴上答應,心裡卻不是十分的在乎。究其原因,一來是我這人比較固步自封,二來起初確實也沒太相信 AJax 真有 BOSS 說的那麼神奇。
轉變是從昨天天始的,這一周在公司主要精力都是在用 C++ 寫 framework,不得不承認它比較辛苦,細枝末節之處非常之煩,昨天下午呆著呆著就不想干活了,就開始四處游蕩,正好看到我們自己也有項目已經成功應用了 AJax,於是也就想看一看,無奈那幫家伙的開發文檔是出奇的少,只好在網上找找資料,自己研究研究吧。
作為一個技術人員,我看到一項新技術,總是喜歡琢磨琢磨它內部是如何實現的。在對 Ajax 有了初步認識以後,自然想看看其內部機制,但是令我失望的是,至少介紹 Ajax 內部實現的文章少之又少,好容易找到一篇,卻也只是簡單列了列一些 Javascript 代碼,並且沒什麼解釋,頗為郁悶。想想求人不如求己,況且自己研究的或許印象更深一些。於是找到了一個 AJaxPro,下來琢磨琢磨,只是對於 JavaScript 我實在知之甚少,不明白之處依然很多,不過還是想寫出來,拋磚引玉,望高人們不吝指教。
一、使用的例子 本文使用的例子很簡單,一個文本框,在其中敲入文字之後,下方就顯示該文字並加上一個“(Hello from server)”。源碼如下(有刪節):
1
<%@ Page language="c#" ClassName="KeyPressDemo" Inherits="System.Web.UI.Page" %>
2
<script runat="server" language="c#">
3
4
private void Page_Load(object sender, EventArgs e)
5
{
6
AjaxPro.Utility.RegisterTypeForAJax(typeof(KeyPressDemo));
7
}
8
9
[AjaxPro.AJaxMethod]
10
public string EchoInput(string s)
11
{
12
return s += " (Hello from server)";
13
}
14
15
script>
16
17
<form id="Form1" method="post" runat="server">form>
18
19
<div class="content">
20
<h1>KeyPressDemo Examplesh1>
21
<p>Press any key in the textbox and see the echo in the DIV element on the right side.p>
22
<input type="text" id="myinput" onkeyup="doTest1();"/> <div id="mydisplay">---- empty ----div>
23
<p><i>Note, that I do not update the display if a request is running currently.i>p>
24
div>
25
26
<script type="text/Javascript" defer="defer">
27
28
var timer = null;
29
30
function doTest1() {
31
if(timer != null) {
32
clearTimeout(timer);
33
}
34
timer = setTimeout(doTest1_next, 100);
35
}
36
37
function doTest1_next() {
38
var ele = document.getElementById("myinput");
39
ASP.KeyPressDemo.EchoInput(ele.value, doTest1_callback);
40
}
41
42
function doTest1_callback(res) {
43
var ele = document.getElementById("mydisplay");
44
ele.innerHtml = res.value;
45
}
46
47
script>