最近完成了一個B/S的物流管理系統,對於在其中使用的一些新技術做一個總結。此為上篇《利用XML實現通用WEB報表列印實際使用中的例子 》的繼續。
為瞭解決伺服器端頁面重新整理引起的使用者不適和減少無需修改資料重新載入的延時,在單據查詢,資料儲存,資料修改等操作時採用了AJAX無重新整理技術,簡單介紹如下:
(一).aspx 頁面
包含頁面配置,調用隱藏表單執行操作返回XML並載入到本表單的javascript代碼: //根據輸入單據號,查詢單據該單據資訊並在頁面上顯示
function DisplayNoteInfo(ctlRowId,ctlNoteNo,ctlHidStockId,ctlHidMoveType,tableId){
//發給幕後處理
//alert("hidGetNotesMaster.aspx?NoteNo=" + emNo.value + "&StockId=" + emStockId.value + "&MoveType=" + emTypeCode.value);
oHttpReq.open("POST", "frmhidInOutInform.aspx?globalNo="+ emNoteNo.value +"&stockId=" + emStockId.value + "&actionType=" + emTypeCode.value , false);
oHttpReq.send("");
xmlResult = oHttpReq.responseText;
oDoc.loadXML(xmlResult);
var dataItems = new Array();
var detailItems = new Array();
dataItems[0] = oDoc.selectNodes("//InformMaster/CUSTOMER_NAME");
//
detailItems[0] = oDoc.selectNodes("//InformDetail/BILL_NO");
//
//主表
if (dataItems[0].length==0 ) //客戶名稱為空白,表示查詢單據資料為空白
{
hasGet = false;
}
else //查詢單據到了資料
{
//客戶
var emCustomAddr = document.getElementById('txtCustomName');
if(dataItems[0].length > 0){
emCustomAddr.value = dataItems[14][0].text;
}
else{
emCustomAddr.value="";
}
hasGet = true;
}
//明細表
if (detailItems[0].length==0)//PROD_TYPE為空白
{
//hasGet = false;
}
else{
for(var i=0;i<=detailItems[0].length-1;i++){//逐個遍曆
var newRowId;
newRowId = NewRow(tableId); //在表的最後新增一行
newRowId = parseInt(newRowId);
eval("document.all.item(txtBoxCtl[j],newRowId-1).value=detailItems[j][i].text");
}
hasGet = true;
}
return hasGet;
}
(二)隱藏表單在後頭工作,返回XML檔案 globalNo = Request.QueryString("globalNo")
stockIdStr = Request.QueryString("stockId")
Select Case actionType '根據出入庫類型選擇操作
Case "XIAOSHOUCHUKU" '銷售出庫
Dim SaleOutAction As New OutSaleAction
'檢索銷售出庫主表
Ds = SaleOutAction.GetInformInfo(globalNo, stockIdStr, notFinished)
Dim writer As New System.Xml.XmlTextWriter(Response.OutputStream, New System.Text.UTF8Encoding)
writer.Formatting = System.Xml.Formatting.Indented
writer.Indentation = 4
writer.IndentChar = " "
Ds.WriteXml(writer)
writer.Flush()
writer.Close()
(三).要注意的問題
1.表單間通過post方法傳遞的參數值最大不能超過4K,否則javascript執行直接出錯。
2.我在項目中添加了三個隱藏表單,分別為:hidInform檢索單據資訊,hidAction儲存等操作,hidXml取得列印單據XML檔案。
3.對於隱藏表單的存取權限,必須是由系統指向的才有許可權,直接輸入url不允許訪問。
If Request.UrlReferrer Is Nothing Then
Response.Write("<script language='javascript'>alert( '非法的存取方法!');</script>")
Response.Write("<script language='javascript'>parent.location.href='default.aspx';</script>")
Exit Sub
End If
好了,今天就寫到這兒。使用的技術很簡單,之所以寫出來,一是對給新入門的朋友提供一點協助,二是自己總結提高。歡迎討論。