B/S離線技術設計與實現

其實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”
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *