這個實列只適合操作小資料量時使用,如果調用大量資料會出現很長的延時。同時加入識別id(CallBackid),加入這個id的作用在於如果頁面上有多處需要調用時,用來區分資料,否則會引起資料衝突。下面是代碼:
js操作類(可單獨封裝成js類檔案):var xmlhttp;
var CallBackid ;//返回標誌
//xml函數部分
function CreateXmlHttpRequest()
{
// 使用 try 來捕獲建立失敗,再換個方法來建立
try { // 如果不成功,那麼嘗試在較新 IE 裡的方式
xmlhttp=new ActiveXObject("MSXML2.XMLHTTP");
}
catch(e) {
try {
// 失敗則嘗試使用較老版本 IE 裡的方式
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1) {
xmlhttp=false;
}
}
if (!xmlhttp) { // 如果建立 XMLHttpRequest 對象失敗,那麼提醒訪問者該頁面可能無法正確訪問
alert("Xml檔案建立失敗!");
return xmlhttp;
}
}
function GetXmlHttp(url,tk)
{
CallBackid = tk;//
if (url == null || url == "") return null;
var xmldom = new ActiveXObject("Microsoft.XMLDOM");
CreateXmlHttpRequest();
xmlhttp.open("GET",url,false,"","");
xmlhttp.onreadystatechange = startCallback;
xmlhttp.send(null); // 發送請求,因為是GET,所以send的內容為null
}
// 通過xmldom操作結果
// 因為使用非同步方式所以要在 XMLHttpRequest 對象的狀態改變時做相應的處理
function startCallback()
{
if(xmlhttp.readyState==4) // 如果 XMLHttpRequest 的狀態為4,應該是ready來的,那麼繼續處理
{
if(xmlhttp.status==200) // 需要判斷返回狀態是否為200 OK,有些情況如檔案不存在,就為返回404
{
switch(CallBackid )
{
case 1:
xmldom = xmlhttp.responseXML.documentElement;//每個引用定義的類名要區分開,要不資料會重複
//需要調用的函數名
break;
case 2:
VehDataxmldom = xmlhttp.responseXML.documentElement;
//需要調用的函數名
break;
case 3:
Aralmxmldom = xmlhttp.responseXML.documentElement;
//需要調用的函數名
break;
default:
break;
}
}
else
{
alert("HTTP error: "+xmlhttp.status);
}
}
}
執行資料庫查詢的aspx頁面(此頁面非引入js檔案的頁面,它只是調用資料的中間頁),即url中cs檔案包含內容
protected void Page_Load(object sender, EventArgs e)
{
GetData();
}
protected void GetData()
{
SqlServerDataBase db = new SqlServerDataBase();
DataSet dt = db.Select("自己的sql語句") ", null);
Response.ContentType = "text/xml";
Response.Write(dt.GetXml());
Response.End();
}
以上代碼在點擊按鈕時觸發,如果需要頁面載入時調用或每隔一段時間就去調用即時資料,需在引用該js檔案的頁面寫如下代碼
<script type="text/javascript" language="javascript">
function pageonloadxml()
{
GetXmlHttp(aa.aspx',3);
GetXmlHttp(bb.aspx',1);
setTimeout("pageonloadxml();",10000);
}
</script>
<body onload="pageonloadxml();" >
當然,自己還可以再寫一些控制函數,來控制頁面的重新整理或資料的回調。