asp.net+xml实现无刷新调数据

    这个实列只适合操作小数据量时使用,如果调用大量数据会出现很长的延时。同时加入识别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();" >
当然,自己还可以再写一些控制函数,来控制页面的刷新或数据的回调。
posted on 2008-05-02 12:37  jeasonlee  阅读(510)  评论(5编辑  收藏  举报