XmlHttp技术简单介绍

这些内容都是在网上收集并整理的,并非原创!

一、             数据库远程管理技术

基于互联网的广域网现代应用中的一个重要环节是数据库远程监控。首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式:

早期通过编写CGI-BIN程序模块进行数据库远程管理。但CGI-BIN的运行速度慢,维护很不方便,现在已经基本被弃用。


这几年使用组件对象模型(Component Object Model, COM)的应用非常多,效果也很好。但如果使用的是第三方服务器(笔者的网站就是建立在第三方的虚拟主机上),服务器方往往因为保密或其它商业原因不允许用户注册自己的组件。


近年来由微软公司推出的.NET平台和SUN公司的J2EE平台都是非常高档的数据库远程管理与服务平台。都能提供优质的多层(n-Tier)应用服务。

其中,.NET的简单对象访问协议(Simple Object Access Protocol, SOAP)使用超文本传输协议(Hypertext Transfer Protocol, HTTP)和扩展标记语言(Extensible Markup Language, XML)技术实现跨系统(例如Windows - Linux)的通讯服务方式已经广为开发商接受和使用。许多大型应用,例如企业资源计划(Enterprise resource planning, ERP)等都建立在这样的大型平台之上。

但对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。


曾经在互联网技术和Java技术方面一度落后的微软公司在XML应用开发则走在了前头。她的XML解析器(MSXML)中的XMLHTTP协议是一个非常方便实用的客户/服务通讯管道。综合运用XMLHTTP以及ActiveX数据对象(ActiveX Data Objects, ADO/ADOX)可以简单方便地实现数据库远程管理。


本文介绍如何综合运用XMLHTTPADO/ADOX进行远程数据库管理。

 

二、             数据库远程管理体系

数据库远程管理的任务流程是:
1
、客户端向服务端发出数据库结构和数据的查询或修改指令。

2
、服务端接受并执行有关指令并向客户端返回结果。

3
、客户端接受并显示服务端返回的指令执行结果。


实现数据库远程管理的二个主要关键环节是:

1
、客户端与服务端之间的指令上传和结果下传的数据通道,由XMLHTTP协议实现。

2
、服务端前沿与数据库之间的指令传送和结果返回,由起着中间层作用的ADO/ADOX接口完成。

 

 三、       XMLHTTP的使用

顾名思义,XMLHTTP是个传送XML格式数据的超文本传输协议。


实际上,XMLHTTP的数据传输过程更为灵活一些:

它上传的指令可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。还可以是URL的参数。

它下达的结果可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。

详情可参阅文末链接。


客户端调用XMLHTTP的过程很简单,只有5个步骤:

1
、创建XMLHTTP对象

var htp = new ActiveXObject("microsoft.xmlhttp");
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。
   
客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。

htp.open("POST","webform1.aspx?abc=1",false);
3、发送指令。

htp.send();
4、等待并接收服务端返回的处理结果。

alert(htp.responseText);
5、释放XMLHTTP对象

htp = null;

XMLHTTP
方法:
Open bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword
    bstrMethod
:数据传送方式,即GETPOST

    bstrUrl
:服务网页的URL

    varAsync
:是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。

     
应用中一般将其置为False,即异步执行。

    bstrUser
:用户名,可省略。

    bstrPassword
:用户口令,可省略。


Send varBody

    varBody
:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。

Url参数表示你所要处理数据的文件地址


setRequestHeader bstrHeader, bstrValue
    bstrHeader
HTTP (header)
    bstrValue
HTTP (header)的值

   
如果Open方法定义为POST,可以定义表单方式上传:

    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
     
XMLHTTP
属性:

onreadystatechange
:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody
:结果返回为无符号整数数组。

responseStream
:结果返回为IStream流。

responseText
:结果返回为字符串。

responseXML
:结果返回为XML格式数据。


readyState:属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
说明

0 Response
对象已经创建,但XML文档上载过程尚未结束

1 XML
文档已经装载完毕

2 XML
文档已经装载完毕,正在处理中

3
部分XML文档已经解析

4
文档已经解析完毕,客户端可以接受返回消息
     

下面是本文附件源程序中的一个应用示例:

(vb.script)
Function GetResult(urlStr)
    Dim xmlHttp
    Dim retStr
     
    Set xmlHttp = CreateObject("Msxml2.XMLHTTP")    '
创建对象

    On Error Resume Next                    '
出错处理

    xmlHttp.Open "POST", urlStr, False        '
POST方式打开连接,异步执行。

    xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" '
上传表单

    xmlHttp.Send                            '
发送指令


    If Err.Number = 0 Then                    '
如果连接正确

        retStr = xmlHttp.responseText        '
等待并获得服务端返回的结果字符串

    Else
        retStr = "Url not found"                '
否则返回出错信息

    End If
    Set xmlHttp = nothing                    '
释放对象

GetResult = retStr                        '返回结果
End Function

GetResult()
函数带入一个服务网页的URL参数,把上传的指令安放在URL后面的参数上,如:

   
urlStr = "server.asp?cmd=" & cmd & "&db=" & db & "table=" & table

    cmd
:执行方式,例如查询,修改,删除等等。
    db
:服务端数据库名

    table
:服务端表名

 
还可以定义一个字符串变量,然后将该变量作为Send方法的参数

如:

strA = "submit1=Submit&text1=scsdfsd";    

Send(strA);
然后提交指令,等待并接收返回的处理结果。结果以字符串方式返回。


最后由函数调用者处理并显示结果。

 

下面这段程序使用Send来发送xml数据并处理的例子

 

function Send(Str,URL)
//STR
参数是传入的XML数据,你也可以传入其他文本数据
.
//
不过这个函数需要服务器端处理之后返回XML数据,你也可以修改一下

//URL
参数表示你所要处理数据的ASP文件地址
{
var Http = new ActiveXObject("Microsoft.XMLHTTP") //
建立XMLHTTP对象
var Dom = new ActiveXObject("Microsoft.XMLDOM") //
建立XMLDOM对象
Http.open("POST",URL,false)
//
第一个参数的意思是,"POST"方式发送数据.可以大到4MB,也可以换为"GET".只能256KB
//
2个参数的意思是数据发送到哪个文件处理

//
3个参数意思是同步或异步方式.TRUE为异步,FALSE为同步
Http.send(Str) //
开始发送数据.............嘟嘟..
Dom.async=false //
设置为同步方式获取数据

Dom.loadXML(Http.responseText)
//
开始获取服务器端处理后返回的数据.我在这里设置必须为XML数据,否则出错.
//
你也可以自己修改.使返回的是2进制或者记录集数据
.................................
if(Dom.parseError.errorCode != 0) //
检查是否发生获取数据时错误

{
delete(Http)
delete(Dom)
return(false)
}
else
{
var Back = Dom.documentElement.childNodes.item(0).text
//
得到返回的XML数据,我这里假设处理程序只返回一行XML数据(一个节点)
delete(Http)
delete(Dom)
return(Back) //
函数返回数据.......................结束

}
}

 

VAR CAT = Send("<用户资料><姓名>谢柠檬</姓名></用户资料>","HTTP://WWW.CHINAASP.COM/VIVA.ASP") //执行函数
IF(CAT == FALSE)
{
ALERT("
对不起.处理程序返回的是FALSE.数据处理已经失败........")
}
ELSE
{
IF(EVAL(CAT))
{
ALERT("OK.
数据已经发送成功.兼以处理完成
!!!!!!")
}
ELSE
{
ALERT("
对不起.处理程序返回的是FALSE.数据处理已经失败
........")
}
}

===============================VIVA.ASP============================
ON ERROR RESUME NEXT
DIM BOBO
DIM MOMO
SET BOBO = SERVER.CREATEOBJECT("MICROSOFT.XMLDOM")
BOBO.ASYNC = FALSE
BOBO.LOAD REQUEST
IF BOBO.PARSEERROR.ERRORCODE <> 0 THEN
RESPONSE.WRITE("<
程序处理结果><最终结果>FALSE</最终结果></程序处理结果
>")
ELSE
SET MOMO = BOBO.DOCUMENTELEMENT
IF MOMO.CHILDNODES.ITEM(0).TEXT = "
谢柠檬
" THEN
RESPONSE.WRITE("<
程序处理结果><最终结果>TRUE</最终结果></程序处理结果
>")
ELSE
RESPONSE.WRITE("<
程序处理结果><最终结果>FALSE</最终结果></程序处理结果
>")
END IF
END IF
SET BOBO = NOTHING

 

 

xmlhttp有什么用,在什么情况下有用?

1客户端按照与中间层约定好的格式,把录入的数据或查询条件拼成xml串,通过xmlhttp发送到服务器端的一个asp文件,asp先读取xml串中定义的要调用的组件和接口,根据读取的内容,调用相应的组件和接口,组件接收到请求后,先进行schema验证,再解析xml串的内容,是插入就把相应的数据更新到oracle数据库,是查询就根据xml内容拼成sql串,再把查询结果,按照约定格式、拼成xml串,传给asp文件,asp文件再responsexmlhttp当中,客户端再从xmlhttp.responsexml中读取xml,再解析xml,把结果显示到界面上。

2无刷新技术的关键,而且可以用xml数据格式。

 

 

 

XmlHttp技术文档链接:http://www.cnblogs.com/renyu732/favorite/29794.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值