其實B/S的離線很好辦,數據在緩存中就可以實現,但如果有數據回調或是數據驗證,就不問題瞭.
所以實現我個人認為有這相幾個方法:
方法一:
1)數據緩以數組或XML緩存在客戶端的網頁中,用JS進行交互;
2)保存時,如果聯機就直接保存到服務器,如果斷線就保存在網頁的XML或JS數組;
3)網絡接通時,用XMLHTTP方式將離線數據上傳到服務器
方法二:
1)數據緩存到客戶端的XML文件,也JS的方式加載到頁面;
2)保存時,文件先保存在客戶端XML文件,如果網絡聯機就直接送到服務器,並清空XML;
3)網絡接通進,將XML同步到服務器
兩種方式都可以實現離線和斷電功能;也各有優點,
方法一就是用戶不能關閉當前的網站或系統,因為XML可用是以Frame的方隱藏的網頁上的,關閉後,數據一樣丟失..
方法二需要解決在客戶端讀寫文件的權限與加解密問題;
我個人選擇的是方法二,用ActievX + 數字簽名 + XML + MD5文件驗證實現
Javascript代碼
<script type="text/javascript" >
function SearchData()
{
var InputParam;
InputParam = document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit1").UniqueID %>').value;
for(var i=0;i<cst10100[0].length;i++)
{
if(cst10100[0][i]==InputParam)
{
igedit_getById('<%= this.UltraWebTab1.FindControl("WebTextEdit2").UniqueID %>').setValue(cst10100[4][i]);
igedit_getById('<%= this.UltraWebTab1.FindControl("WebTextEdit3").UniqueID %>').setValue(cst10100[7][i]);
igedit_getById('<%= this.UltraWebTab1.FindControl("WebTextEdit4").UniqueID %>').setValue(cst10100[5][i]);
igedit_getById('<%= this.UltraWebTab1.FindControl("WebTextEdit5").UniqueID %>').setValue(cst10100[6][i]);
igedit_getById('<%= this.UltraWebTab1.FindControl("WebTextEdit8").UniqueID %>').setValue(cst10100[2][i]);
}
}
var ListBoxControl=document.getElementById('<%= this.UltraWebTab1.FindControl("ListBox1").UniqueID %>');
for(var z=ListBoxControl.options.length;z>0;z–)
{
ListBoxControl.options[z-1].parentNode.removeChild(ListBoxControl.options[z-1]);
}
for(var z=0;z<cst10101[0].length;z++)
{
if (cst10101[0][z]==InputParam)
{
var newOption=document.createElement("OPTION");
newOption.text=cst10101[3][z];
newOption.value=cst10101[3][z];
ListBoxControl.options.add(newOption);
}
}
var dropdownlistControl=document.getElementById('<%= this.UltraWebTab1.FindControl("DropDownList2").UniqueID %>');
for(var z=dropdownlistControl.options.length;z>0;z–)
{
dropdownlistControl.options[z-1].parentNode.removeChild(dropdownlistControl.options[z-1]);
}
for(var z=0;z<cst10101[0].length;z++)
{
if (cst10101[0][z]==InputParam)
{
var newOption=document.createElement("OPTION");
newOption.text=cst10101[1][z];
newOption.value=cst10101[1][z];
dropdownlistControl.options.add(newOption);
}
}
}
//設置時間
var igdrp =igdrp_getComboById('<%= this.UltraWebTab1.FindControl("WebDateChooser1").UniqueID %>');
igdrp.setText('2007-4-11');
//添加節點
for(var z=0;z<cst10104[0].length;z++)
{
var resultId=document.getElementById('<%= this.UltraWebTab1.FindControl("DropDownList1").UniqueID %>');
var newOption=document.createElement("OPTION");
newOption.text=cst10104[1][z];
newOption.value=cst10104[0][z];
resultId.options.add(newOption);
}
</script>
<IE:CLIENTCAPS ID="oClientCaps" style=behavior:url(#default#clientCaps)/>
<script type="text/javascript" >
function getstatus()
{
if(oClientCaps.connectionType=="lan")
return "online";
else
return "offline";
}
function runClock()
{
theTime = window.setTimeout("runClock()", 1000);
status=getstatus();
//if (getstatus() =="online")
//判斷本地是否有離線數據,當存在時進行同步
//SyncXML()
}
runClock()
function InsertData()
{
var CommonArry= new Array();
CommonArry[0]= new Array();
CommonArry[0][0]= 'cust';
CommonArry[0][1]= document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit1").UniqueID %>').value; // value
CommonArry[0][2]= "2";
CommonArry[1]= new Array();
CommonArry[1][0]= 'description';
CommonArry[1][1]= document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit8").UniqueID %>').value; // value
CommonArry[1][2]= "2";
CommonArry[2]= new Array();
CommonArry[2][0]= 'DeliveryAddr';
CommonArry[2][1]= document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit2").UniqueID %>').value; // value
CommonArry[2][2]= "2";
CommonArry[3]= new Array();
CommonArry[3][0]= 'PhoneNo';
CommonArry[3][1]= document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit4").UniqueID %>').value; // value
CommonArry[3][2]= "2";
CommonArry[4]= new Array();
CommonArry[4][0]= 'FaxNo';
CommonArry[4][1]= document.getElementById('<%= this.UltraWebTab1.FindControl("WebTextEdit5").UniqueID %>').value; // value
CommonArry[4][2]= "2";
insertData('custinfo',CommonArry);
document.getElementById("KunleneXML").WriteXML("JohnnyOfflineLineXML",doc.xml);
}
</script>
作者“landroid”