利用xmlhttp远程异步调用数据的方式真的能使web程序可以完全模拟c/s程序的特点。大大提高了web程序的 实现效果。尤其是以xmlhttp技术为核心的 ajax ,将是web程序的一次飞跃。本文将讨论一个刚刚用到的一个实例。
程序的功能是 在 录入及面有一个文本框 ,我们输入一个设备编码,然后双击 就会将该设备的详细信息显示出来。
程序分两个部分:客户端 和 服务器
一、客户端
<SCRIPT language="VBScript">
'利用AJAX技术异步从数据库取数据
dim oReq
set oReq = CreateObject("MSXML2.XMLHTTP") '创建MSXML2.XMLHTTP对象
sub callDetail(a_code)
'打开请求
oReq.open "get","assets_pc_query_detail.asp?assets_code=" & a_code,true
'设置请求头,
oReq.setRequestHeader "Content-Length",Len(strA)
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
'调用javascript函数以定义 onreadystatechange 事件触发 操作
setEvent
'发送请求
oReq.send()
'msgbox bytes2BSTR(oReq.responseBody)
end sub
'这个函数没用上,它是用来包装请求信息的
Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)/ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function
'非常重要,对服务器的响应信息进行处理,否则汉字乱码
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
</script>
<script language="javascript">
//此函数定义当获得相应信息后将做什么操作
// 将得到的信息 放到一个 span 中,并呈现给用户
function setEvent()
{
oReq.onreadystatechange=function(){
if(oReq.readystate==4)
{
if(oReq.status==200)
{
assets_detail.innerHTML= bytes2BSTR(oReq.responseBody);
assets_detail.style.left=200;
assets_detail.style.top=100;
assets_detail.style.visibility='visible';
}
}
}
}
</script>
<input οndblclick="callDetail(this.value)" οnchange="anyChange();" style='width:95%' type="text" maxlength="50" name="assets_code" value="" ID="Text1">
<span id="assets_detail" οnclick="this.style.visibility='hidden';" style="background-color:#e0e0e0;visibility:hidden;position:absolute;top:100;left:100"></span>
二、服务器
assets_pc_query_detail.asp
<%Response.Expires = -1%>
<!--#include file="../inc/conn2.asp"-->
<!--#include file="../inc/config.asp"-->
<%
'计算机设备查询详细(车间级)
'writer:northsnow
'create date :060614
%>
<%
assets_code=trim(request("assets_code"))
if assets_code="" then response.Write "nononono"
%>
<%
'读取数据
set rs=server.CreateObject("adodb.recordset")
rs.CursorLocation=3
Call OpenConn()
set rs=server.CreateObject("adodb.recordset")
rs.open "select * from assets_pc_detail_v where assets_code='" & assets_code & "'",conn,3,1
if not (rs.eof and rs.bof) then
%>
设备编码:<%=FilterParam3(rs("assets_code"))%> <br>
设备名称:<%=FilterParam3(rs("assets_name"))%> <br>
设备型号:<%=FilterParam3(rs("assets_spec"))%> <br>
购买日期:<%=FilterParam3(rs("purchase_date"))%> <br>
cpu:<%=FilterParam3(rs("cpu_brand"))%> <%=FilterParam3(rs("assets_cpu"))%> <br>
内存:<%=FilterParam3(rs("assets_ram"))%> <br>
硬盘:<%=FilterParam3(rs("assets_hd"))%> <br>
品牌:<%=FilterParam3(rs("assets_brand"))%> <br>
IP:<%=FilterParam3(rs("assets_ip"))%> <br>
技术状态:<%=FilterParam3(rs("tech_status"))%>
<% end if
Rs.Close()
set rs=nothing
CALL CLOSECONN()%>