⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index.htm

📁 ASP + AJAX留言板 学习AJAX好代码
💻 HTM
字号:
<html>
<head>
 <meta http-equiv="content-type" content="text/html;charset=gb2312" />
 <title>Ajax无刷新留言板</title>
 <script type="text/javascript" src="op.js"></script>
 <style type="text/css">
 body{font-size:10pt;}
 td{font-size:10pt;}
 a{text-decoration:none}
 </style>
 <script type="text/javascript">
 var obj;
 var pagecount=10,currentpage=1,totalrecord=0,totalpage=0;
 function createObj()
 {
    if(window.XMLHttpRequest)
    {
      return new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
      var os=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHTTP"];
      var o;
      for(var i=0;i<os.length;i++)
      {
        try
        {
          o=new ActiveXObject(os[i]);
          return o;
        }
        catch(e)
        {
        }
      }
    }
 }
 window.onload=InitData;
 function InitData()
 {
    var url="op.asp?action=read&p="+currentpage+"&pc="+pagecount+"&init=1&ts="+escape(new Date().toString());//注意时间戳的问题,防止缓存用的
    obj=createObj();
    obj.open("get",url,true);
    obj.onreadystatechange=function()
    {
      if(obj.readyState==4)
      {
        if(obj.status==200)
        {
          parseXML(obj.responseXML,"");
        }
        else
        {
           document.getElementById("tdMsg").cells[0].innerHTML="<font color='red'>加载数据数据失败!</font>";
        }
      }
    }
    obj.send(null); 
    InitMark();   
 }
 
 function InitMark()
 {
   var mark=document.getElementById("mark");
   if(navigator.appName!="Netscape")
      mark.style.filter="Alpha(opacity=60)";
   else
      mark.style.opacity="0.6";
   mark.contentWindow.document.open();
   mark.contentWindow.document.write("<div align='center' style='position:absolute;top:"+document.body.clientHeight/2
                 +";width:100%'><font size='5'><b>正在处理您的请求......</b></font></div>");
   mark.contentWindow.document.close();
 }
 
 function Add()
 {
    var t=document.getElementById("title"),ct=document.getElementById("content");
    if(t.value!=""&&ct.value!="")
    {      
      OpMark("");
      var url="op.asp?action=add&ts="+escape(new Date().toString());
      var par="t="+escape(t.value)+"&ct="+escape(ct.value);
      obj=createObj();
      obj.open("post",url,true);
      obj.onreadystatechange=function()
      {
        if(obj.readyState==4)
        {
          OpMark("none");
          if(obj.status==200)
          {             
             if(ErrorCodeHanlder(obj.responseXML))
               return;
             var id=obj.responseXML.getElementsByTagName("id")[0].firstChild.nodeValue;
             var tbList=document.getElementById("tbList");
             if(tbList.rows.length>=pagecount)
               tbList.removeChild(tbList.rows[pagecount-1]);//先删除最后一条记录
             AddTr(tbList,t.value,ct.value,id,0);    
             t.value="";
             ct.value="";  
             totalrecord++;
             GetGuide();       
             alert("添加留言成功!");             
          }
          else
          {
            alert("添加留言失败!");
          }
        }
      }
      obj.setRequestHeader("content-type","application/x-www-form-urlencoded");//post方法时注意设置这个头
      obj.send(par);
    }
    else 
    {
      alert("标题和留言内容不能为空!");
      document.getElementById("title").focus();
    }
 }
 function ErrorCodeHanlder(xml)
 {
   var err=xml.getElementsByTagName("errcode");
   var msg="",errstr;
   if(err.length>0)
   {
     code=err[0].firstChild.nodeValue.toString();     
     switch(code)
     {
       case "1":
         alert("action参数错误!");
         return true;
       case "2":
         alert("读取数据失败!");
         return true;
       case "3":
         alert("标题和留言内容不能为空!");
         return true;
       case "4"://属于服务器错误
         errstr=xml.getElementsByTagName("errmsg");
         if(errstr.length!=0)
           msg=errstr[0].firstChild.nodeValue.toString();
         alert("添加留言失败!===错误原因===\n"+msg);
         return true;   
       case "5":
         alert("要删除的数据的id不正确!");
         return true;  
       case "6":
         alert("要删除的数据的id不存在!");
         return true;  
       case "7"://属于服务器错误
         errstr=xml.getElementsByTagName("errmsg");         
         if(errstr.length!=0)
           msg=errstr[0].firstChild.nodeValue.toString();
         alert("删除留言失败!===错误原因===\n"+msg);
         return true;   
       case "8":
         alert("要更新的数据的id不正确!");
         return true; 
       case "9":
         alert("要更新的数据的id不存在!");
         return true; 
       case "10"://属于服务器错误
         errstr=xml.getElementsByTagName("errmsg");         
         if(errstr.length!=0)
           msg=errstr[0].firstChild.nodeValue.toString();
         alert("更新留言失败!===错误原因===\n"+msg);
         return true;    
     }
   }
   return false;
 }
 function parseXML(xml,Clear)
 {
   if(ErrorCodeHanlder(xml))//有错误代码直接返回
     return ; 
   
   if(Clear!="Clear")//第一次加载数据得到总数据条数,以后由js控制这个变量,服务器不再返回这个值,减少网络流量
   {
     var tbinfo=xml.getElementsByTagName("tbinfo")[0];
     totalrecord=parseInt(tbinfo.childNodes[0].firstChild.nodeValue);
   }
   if(totalrecord==0)
   {
     document.getElementById("tdMsg").cells[0].innerHTML="<font color='red'>没有数据!</font>";
   }
   else
   {
     document.getElementById("tdMsg").style.display="none";
     var tbList=document.getElementById("tbList");   
     if(Clear=="Clear")
     {
       ClearAllRows(tbList);
     }  
     var items=xml.getElementsByTagName("item");
     for(var i=0;i<items.length;i++)
     {
       var citem=items[i];
       AddTr(tbList,citem.childNodes[1].firstChild.nodeValue,citem.childNodes[2].firstChild.nodeValue,citem.childNodes[0].firstChild.nodeValue,i);      
     }
   }
   GetGuide();
 }
 function ClearAllRows(tbList)
 {
   while(tbList.rows.length!=0)
    tbList.removeChild(tbList.rows[0]);
 }
 function GetGuide()
 {    
    if(totalrecord % pagecount ==0)
      totalpage=totalrecord / pagecount;
    else
      totalpage=parseInt(totalrecord / pagecount)+1;
    var tbGuide=document.getElementById("tbGuide");
    tbGuide.innerHTML="";
    if(currentpage<=1)
    {
      tbGuide.innerHTML+="<font color='#bbbbbb'>首页</font> <font color='#bbbbbb'>上一页</font>";
    }
    else
    {
      tbGuide.innerHTML+="<a href='#' onclick=\"HandlerPage('First')\">首页</a> <a href='#' onclick=\"HandlerPage('Pre')\">上一页</a>";
    }
    if(currentpage>=totalpage)
    {
      tbGuide.innerHTML+=" <font color='#bbbbbb'>下一页</font> <font color='#bbbbbb'>尾页</font>";
    }
    else
    {
      tbGuide.innerHTML+=" <a href='#' onclick=\"HandlerPage('Next')\">下一页</a> <a href='#' onclick=\"HandlerPage('Last')\">尾页</a>";
    }
    tbGuide.innerHTML+=" 共<font color='red'>"+totalrecord+"</font>条记录,<font color='red'>"+pagecount+
                       "</font>条/页。共有<font color='red'>"+totalpage+"</font>页,当前页<font color='red'>"+currentpage+"</font>";
 }
 function HandlerPage(Type)
 {
    OpMark("");
    switch(Type)
    {
      case "First":
        currentpage=1;
        break;
      case "Pre":
        currentpage--;
        break;
      case "Next":
        currentpage++;
        break;
      case "Last":
        currentpage=totalpage;
        break;
      default:
        return;
    }
    url="op.asp?action=read&p="+currentpage+"&pc="+pagecount+"&ts="+escape(new Date().toString());
    obj=createObj();
    obj.open("get",url,true);
    obj.onreadystatechange=function()
    {
      if(obj.readyState==4)
      {
        OpMark("none");
        if(obj.status==200)
        {          
          parseXML(obj.responseXML,"Clear");
        }
        else
        {
           alert("加载数据失败!");
        }
      }
    }
    obj.send(null); 
 }
 function AddTr(tbList,ti,ct,id,i)
 {
   var r=tbList.insertRow(i);
   r.fid=id;
   var c0,c1,c2;
   c0=r.insertCell(0);
   c1=r.insertCell(1);
   c2=r.insertCell(2);
   c0.style.width="35%";
   c1.style.width="50%";
   c2.style.width="15%";
   c0.innerHTML="<span>"+ti+"</span>"
       +"<input type='text' style='display:none;width=:100%' value='"+ti+"'/>";
   c1.innerHTML="<span>"+ct+"</span>"
                   +"<textarea type='text' style='display:none;width:100%;height:50px'>"+ct+"</textarea>";
   c2.innerHTML="<a href='#' onclick=\"Update(event,'"+id+"')\">修改</a>"
                   +"<a href='#' style='display:none;width:100%;' onclick=\"Cancel(event)\">  取消</a>"
                   +"<a href='#' onclick=\"if(confirm('确认删除?'))Delete(event,'"+id+"')\"> 删除</a>";
   c2.align='center';
 }
 function Delete(e,id)
 {
   e=e?e:event;
   var tag=e.target?e.target:e.srcElement;
   var tr=tag.parentNode.parentNode;
   OpMark("");
   var tbList=document.getElementById("tbList");
   //获取当前显示的最小id,以便从服务器返回一条数据来填补删除的行
   var minid=tbList.rows.length>0?tbList.rows[tbList.rows.length-1].fid:"-1";   
   var url="op.asp?action=del&id="+id+"&minid="+minid+"&ts="+escape(new Date().toString());

   obj=createObj();
   obj.open("get",url,true);
   obj.onreadystatechange=function()
   {
     if(obj.readyState==4)
     {
        OpMark("none");
        if(obj.status==200)
        {
           if(ErrorCodeHanlder(obj.responseXML))
             return ;
           tbList.removeChild(tr);//删除当前行  
           var item=obj.responseXML.getElementsByTagName("item");
           if(item.length!=0)//有数据返回
           {
              AddTr(tbList,item[0].childNodes[1].firstChild.nodeValue,item[0].childNodes[2].firstChild.nodeValue,item[0].childNodes[0].firstChild.nodeValue,tbList.rows.length);
           }
           totalrecord--;
           GetGuide();
           alert("删除成功!");
        }
        else
        {
          alert("删除失败!");
        }
     }
   }
   obj.send(null);
 }
 function OpMark(state)
 {
   document.getElementById("mark").style.display=state;
 }
 function Update(e,id)
 {
   e=e?e:event;
   var tag=e.target?e.target:e.srcElement;
   var tr=tag.parentNode.parentNode; 
   if(tag.innerHTML=="修改")
   {
     tag.innerHTML="更新";     
     OpTr(tr,"none","");    
   }
   else
   {
     var ti=tr.cells[0].childNodes[1].value,ct=tr.cells[1].childNodes[1].value;
     if(ti==""||ct=="")
     {
       alert("标题和内容不能为空!");
       return;
     }
     OpMark("");
     var url="op.asp?action=up&ts="+escape(new Date().toString());
     var pars="id="+id+"&ti="+escape(tr.cells[0].childNodes[1].value)+"&ct="+escape(tr.cells[1].childNodes[1].value);
     obj=createObj();
     obj.open("post",url,true);
     obj.onreadystatechange=function()
     {
        if(obj.readyState==4)
        {
          OpMark("none");
          if(obj.status==200)
          {
            if(ErrorCodeHanlder(obj.responseXML))
              return ;
            tag.innerHTML="修改";
            //更新值
            tr.cells[0].childNodes[0].innerHTML=tr.cells[0].childNodes[1].value;
            tr.cells[1].childNodes[0].innerHTML=tr.cells[1].childNodes[1].value;
            OpTr(tr,"","none");
            alert("更新成功!");
          }
          else
            alert("更新失败!");
        }
     }
     obj.setRequestHeader("content-type","application/x-www-form-urlencoded");
     obj.send(pars);     
   }
 }
 function Cancel(e)
 {
   e=e?e:event;
   var tag=e.target?e.target:e.srcElement;
   tag.parentNode.firstChild.innerHTML="修改";
   var tr=tag.parentNode.parentNode;
   //还原值
   tr.cells[0].childNodes[1].value=tr.cells[0].childNodes[0].innerHTML;
   tr.cells[1].childNodes[1].value=tr.cells[1].childNodes[0].innerHTML;
   OpTr(tr,"","none");
 }
 function OpTr(tr,d1,d2)
 {
   var len=tr.cells.length;
   for(var i=0;i<len-1;i++)
   {
     tr.cells[i].childNodes[0].style.display=d1;
     tr.cells[i].childNodes[1].style.display=d2;
   }
   tr.cells[len-1].childNodes[1].style.display=d2;
 }
 function SetPC()
 {
   var PC=document.getElementById("PC");
   if(PC.value==""||isNaN(PC.value)||parseInt(PC.value)<1)
   {
     alert("数据不对!");
     PC.focus();
     return;
   }
   pagecount=parseInt(PC.value);
   HandlerPage("First");
 }
 </script>
</head>
<body>
 <table width="500" align="center" border="0" cellpadding="0" cellspacing="2">
 <tr><td>每页显示的数据:<input type="text" id="PC" value="10" style="width:50px"/> <input type="button" value="设置" onclick="SetPC()"/></td></tr>
 <tr><td align="center">
 <table width='100%' border='1' cellpadding='0' cellspacing='2'>
 <thead style="background-color:#eeeeee">
 <tr><td width='35%' align="center">标题</td>
 <td width='50%' align="center">内容</td>
 <td width='15%' align="center">操作</td>
 </tr>
 <tr id="tdMsg" ><td colspan='3'  align="center"><font color="red">正在加载数据......</font></tr>
 </thead>
 <tbody  id="tbList">
 </tbody>
 <tbody>
 <tr><td colspan='3' align='center' id="tbGuide">
 </td></tr>
 </tbody>
 </table>
 </td></tr> 
 <tr><td>
 <table width='100%' border='1' cellpadding='0' cellspacing='2'>
  <tr>
 <td width='20%'>标题</td>
 <td width='80%'><input type="text" id="title" style="width:100%" /></td>
 </tr>
 <tr>
 <td width='20%'>留言内容</td>
 <td width='80%'><textarea id="content"  style="width:100%;height:100px"></textarea></td>
 </tr>
 <tr><td colspan="2" align="center"><input type="button" value="提交留言" onclick="Add()" /></td></tr>
 </table>
 </td></tr>
 </table>
 <iframe id="mark"  style="display:none;position:absolute;top:0px;left:0px;margin:0px;width:100%;height:100%;background-color:#666666" scrolling="no" frameborder="0"></iframe>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -