css&javascript Ajax初步應用
Ajax,全名是Asynchronous Javascript and XML
非同步 Javascript 及 XML
傳統做法是整個表單提交給伺服器
必須等待伺服器回應後
客戶端才會有畫面更新
而Ajax實現了網頁中特定區塊的資料交換
而不會影響頁面其他區域,若網路夠快
使用者是不會明顯感受到差別
有點像是C#中的執行緒,在使用者不知道的情況下
已默默的完成交待任務並更新畫面
舉例來說,像是註冊時
當輸入完「帳號」後,離開到下一格時
Ajax開始運作,檢查出資料庫中有重複的ID
在帳號框旁會顯示「帳號重複」
其交換方式的過程大至如下:
客戶端觸發事件(可能按了滑鼠,或移到特定區塊)
↓
啟動Ajax向伺服器提出需求
↓
伺服器處理後回應
↓
Ajax接到回應後,更新客戶端指定區域的頁面
綜上,在撰寫客戶端時
需設計觸發事件中「發出需求」及「接受回應」
不然無法實現Ajax,其本上用傳統的Html亦可實現
以下程式碼會實現當使用者輸入數字
會回傳1~數字*數字的表格
例如輸入9回傳9*9乘法表
非同步 Javascript 及 XML
傳統做法是整個表單提交給伺服器
必須等待伺服器回應後
客戶端才會有畫面更新
而Ajax實現了網頁中特定區塊的資料交換
而不會影響頁面其他區域,若網路夠快
使用者是不會明顯感受到差別
有點像是C#中的執行緒,在使用者不知道的情況下
已默默的完成交待任務並更新畫面
舉例來說,像是註冊時
當輸入完「帳號」後,離開到下一格時
Ajax開始運作,檢查出資料庫中有重複的ID
在帳號框旁會顯示「帳號重複」
其交換方式的過程大至如下:
客戶端觸發事件(可能按了滑鼠,或移到特定區塊)
↓
啟動Ajax向伺服器提出需求
↓
伺服器處理後回應
↓
Ajax接到回應後,更新客戶端指定區域的頁面
綜上,在撰寫客戶端時
需設計觸發事件中「發出需求」及「接受回應」
不然無法實現Ajax,其本上用傳統的Html亦可實現
以下程式碼會實現當使用者輸入數字
會回傳1~數字*數字的表格
例如輸入9回傳9*9乘法表
客戶端:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ajax頁面</title>
<script type="text/javascript">
//建立請求物件
var request=null
function createRequest()
{
try
{
request=new XMLHttpRequest();
}
catch(trymicrosoft)
{
try
{
request=new ActivexObject("Msxm12.XMLHTTP");
}
catch(othermicrosoft)
{
try
{
request=new ActiveXOject("Microsoft.XMLHTTP");
}
catch(failed)
{
request=null;
}
}
}
if(request==null)
alert("無法產生Request物件");
}
/*
function createRequest()
{
if(window.XMLHttpRequest)
request=new XMLHttpRequest();
else if(window.ActiveXObject)
request=new ActiveXObject("Microsoft.XMLHTTP");
}
*/
//送出請求
function AskAjaxData()
{
//var url = "/Data/ServerAjaxDataProvider.ashx?tt=" + new Date().getTime();
var nn = document.getElementById("T1").value;
var url = "/Data/ServerAjaxDataProvider.ashx?nn=" + nn + "&tt=" + new Date().getTime();
createRequest(); //建立請求物件
request.open("GET",url,true);
request.onreadystatechange= AcceptData;
request.send(null);
}
//處理回呼處理
function AcceptData()
{
if(request.readyState==4) //回應完成,可獲得回應
{
if(request.status==200)//回應結果是ok的
{
var vv=request.responseText;//取得回應字串
//document.getElementById("ResultSpan").innerText = vv;//寫在span中
document.getElementById("ResultDiv").innerHTML = vv;//寫在div中
}
}
}
</script>
</head>
<body>
<h1>Ajax頁面</h1>
<p>Ajax答案:<span id="ResultSpan"></span></p>
<p><input type="text" id="T1" /></p>
<p><input id="Btn1" type="button" value="呼叫Ajax" onclick="AskAjaxData()" /></p>
<div id="ResultDiv"></div>
</body>
</html>
伺服器端對應的泛式:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
namespace MyAspWeb.Data
{
public class ServerAjaxDataProvider : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
/*
Random rr = new Random();
int a = rr.Next(100);
context.Response.Write("伺服器的值:" + a);
*/
/*
context.Response.Write("伺服器的時間:" + DateTime.Now.ToString());
*/
int aa = int.Parse(context.Request.QueryString["nn"]);
StringBuilder sb = new StringBuilder();
sb.Append("<table width='800' cellpaddind='10' border='1'>");
for (int i = 1; i <= aa; i++)
{
sb.Append("<tr>");
for (int j = 1; j <= aa; j++)
sb.Append(string.Format("<td align='center'>{0}*{1}={2}</td>", i, j, i * j));
sb.Append("</tr>");
}
sb.Append("</table>");
context.Response.Write(sb.ToString());
}
public bool IsReusable
{
get
{
return false;
}
}
}
}

留言
張貼留言