关于XMLHTTP和XML实现无刷新提交
HTML页面
<script language="javascript"> function chkform() { if(form1.UserName.value=="") { alert("真实姓名不能为空!"); form1.UserName.focus(); return false; } if(form1.Password.value=="") { alert("电话号码不能为空!"); form1.Password.focus(); return false; } saveData(); } function saveData() { var objDom = new ActiveXObject("MSXML2.DOMDocument"); objDom.loadXML("<Root/>"); oGeneral = objDom.createElement("username"); oGeneral.text=form1.UserName.value; objDom.documentElement.appendChild(oGeneral); oGeneral = objDom.createElement("password"); oGeneral.text=form1.Password.value; objDom.documentElement.appendChild(oGeneral); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post","submit\\checklogin.asp",false); xmlhttp.send(objDom); if(xmlhttp.responseText=="True"){ window.location="main.asp"; } else { alert(unescape(xmlhttp.responseText)); } } </script> <form name="form1" method="post"> 用户名称:<input name="UserName" type="text"> 用户密码:<input name="Password" type="password"> <img src="3.jpg" width="240" height="82" onClick="javascript:chkform()" style="cursor:hand"> </from> submit\checklogin.asp页面内容 <!--#include file="../include/const.asp"--> <!--#include file="../include/Function.asp"--> <!--#include file="../include/MD5.asp"--> <% on error resume next ‘------------------------------------------------------------------ ‘---------------------读取XML对象---------------------------------- ‘------------------------------------------------------------------ dim username,password set XmlDom = server.CreateObject("Msxml2.domdocument") XmlDom.async = False XmlDom.load(request) If XmlDom.parseError.errorCode<>0 Then response.Write ("Flase") response.End() End If username = XmlDom.selectSingleNode("//username").text password = XmlDom.selectSingleNode("//password").text set XmlDom = nothing ‘------------------------------------------------------------------ ‘Response.Write username&password ‘Response.End() dim errmsg set rs=server.createobject("adodb.recordset") rs.ActiveConnection = strConn rs.Source = "select * from admin where username=‘"&username&"‘" rs.CursorType = 1 rs.CursorLocation = 2 rs.LockType = 3 rs.open() if rs.recordcount = 1 then if rs.Fields.Item("password").Value=MD5(trim(password)) then if rs.Fields.Item("isclock").Value=1 then Randomize() Login_code=Hour(Now()) & Minute(Now()) & Second(Now()) & Int(Rnd()*1000000) ‘Response.Write(Login_code) ‘Response.End() Response.Cookies(All_cookiesName)("ID")=rs.Fields.Item("cmp_id").Value Response.Cookies(All_cookiesName)("username")=rs.Fields.Item("username").Value Response.Cookies(All_cookiesName)("password")=rs.Fields.Item("password").Value Response.Cookies(All_cookiesName)("state")=rs.Fields.Item("state").Value Response.Cookies(All_cookiesName)("Login_code")=Login_code if Cookies_Expires <> 0 then Response.Cookies(All_cookiesName).Expires=Cookies_Expires end if if Cookies_Domain <> "" then Response.Cookies(All_cookiesName).Domain=Cookies_Domain end if rs("Login_code")=Login_code rs.update() rs.close() set rs = nothing Response.Write("True") Response.End() else Response.Write escape("您的用户名已经被锁定,\n请向管理申请解锁!") Response.End() end if else Response.Write escape("您输入的密码错误!") Response.End() end if else Response.Write escape("您输入的用户名不存在!") Response.End() end if if err.number<>0 then Response.Write escape("不知明错误!") %> 这个是个最基本的,当然我们也可以根据特定的需要写成公共函数,把所有的FORM表单里全部VALUE全部给生成XML对象,然后再对其操作。 var yaya=""; var checkboxname=""; var radioname=""; var objDom = new ActiveXObject("MSXML2.DOMDocument"); objDom.loadXML("<Root/>"); for(var i=0;i<frm.elements.length;i++) { if((frm.elements.type=="text")||(frm.elements.type=="hidden")) { oGeneral = objDom.createElement(frm.elements.name); oGeneral.text=unescape(trim(frm.elements.value)); objDom.documentElement.appendChild(oGeneral); } if(frm.elements.tagName=="SELECT") { oGeneral = objDom.createElement(frm.elements.name); oGeneral.text=unescape(frm.elements.options[frm.elements.selectedIndex].value); objDom.documentElement.appendChild(oGeneral); } if(frm.elements.tagName=="TEXTAREA") { oGeneral = objDom.createElement(frm.elements.name); oGeneral.text=unescape(trim(frm.elements.value)); objDom.documentElement.appendChild(oGeneral); } if(frm.elements.type=="checkbox") { if(checkboxname!=frm.elements.name) { for(var j=0;j<document.getElementsByName(frm.elements.name).length; j++) { if(document.getElementsByName(frm.elements.name)[j].checked) { yaya=yaya + document.getElementsByName(frm.elements.name)[j].value + "," ; } } yaya=yaya.substring(0,yaya.length-1); oGeneral = objDom.createElement(frm.elements.name); oGeneral.text=yaya; objDom.documentElement.appendChild(oGeneral); checkboxname=frm.elements.name; yaya=""; } } if(frm.elements.type=="radio") { if(radioname!=frm.elements.name) { for(var j=0;j < document.getElementsByName(frm.elements.name).length;j++) { if(document.getElementsByName(frm.elements.name)[j].checked) { yaya=document.getElementsByName(frm.elements.name)[j].value; break; } } oGeneral = objDom.createElement(frm.elements.name); oGeneral.text=yaya; objDom.documentElement.appendChild(oGeneral); radioname=frm.elements.name; yaya=""; } } } alert(objDom.xml); var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("post",frm.action,false); xmlhttp.send(objDom); if(xmlhttp.responseText=="True"){ //这里就是操作成功 } else{ alert(unescape(xmlhttp.responseText)); } frm为传递进来的form对象,这个需要放在一个函数里传递进去frm |
|