AJAX在业务系统中的使用的一个例子

最近完成了一个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

好了,今天就写到这儿。使用的技术很简单,之所以写出来,一是对给新入门的朋友提供一点帮助,二是自己总结提高。欢迎讨论。


http://xuebing.cnblogs.com/archive/2006/03/24/ajax.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值