高山流水
msgbartop
动之则分,静之则合,无过不及,随曲就伸。
msgbarbottom

29 五 07 Millennium系统OPAC整合之五:让2.0来得更猛烈一些吧!

友情敬告:开放是出路,服务是前途!
这两天本想继续写Ajax,回应一下K师的博文和清心的提问,但下午碰到了件事情,之后偶不得不将之前所写的“Millennium系统OPAC整合”系列文章做出一些改动——主要是将一些被某些人视之为神圣的东西,应要求供奉起来。
但说实话,神圣么,偶不觉得,不过《国产007》的司令说了:即使是一张厕纸,也要好好对待的。因此,偶应要求去掉或改写了相关内容:如相关屏幕截图(即使是偶们馆的哦)、相关参数内容及其他。如果有朋友需要进一步交流,请先联系他们,取得授权,否则偶们只能偷偷摸摸的哦~特此公告,嘿嘿~
呵呵,现在小钟了解槐师所言“制度破坏的力量”了,偶都不知道自己能搞这么大的破坏,那么,就让破坏来得更猛烈一些吧!
整合之三:构建自己的WebBridge一文中,原本思路是采用系统开放的参数,来提交到第三方服务器,从而实现相关功能。那么,如果系统没有这些参数,或者说偶觉得这些参数过于恶心,不用,还能不能实现我们想要的功能呢?
能!
这就是Ajax。
Ajax伟大的地方 在于其所带来的Web
应用客户端化,在于其提供的异步交互颠覆了传统的“提交/等待/
重新显示” 模式。
上一篇整合博文中,偶简单介绍了Ajax的基础,通过JavaScript+Dom,我们可以很轻松的知道,用户现在在哪个页面上,在看哪些信息,甚至可以变态的了解到,用户鼠标的滑动轨迹…….
那么对于整合之三一文,偶在这里提出一个更好的解决方案,该方案,具有更广泛的应用价值,也就是说,本方案已经不再局限于Mllnnm系统了。
第一节:得到参数
让我们回头看看整合之三一文中所隐藏掉的东西,那是告诉我们如何获取参数的一段话。我们在那里,绕来绕去得到了一个检索词,和一个ISBN号,从而实现参数的提交。
现在我觉得这种方式很笨,我决定,通过Ajax来取得我想要的东西——最正规的方式是通过Javascript脚本将当前用户浏览器的DOM文档分解,使用getElementsByTagName()逐一分析并得出任意页面上的值。
当然,也有些捷径。
一般来说,大部分OPAC系统的参数提交,都是通过GET方式进行——我们可以通过看看浏览器的地址栏上是否带有一串很长的参数得出判断。这一串地址,我们要得到它,可以通过window.location.href、window.location.search等等方式获取。获取这串URL之后,我们可以发现,该URL里面包含了许多丰富的信息,我们所需要做的只是进行简单的文本分析。
比如,通过关键词检索得出《thinking in java》一书的书目详细信息页面Url是:

http://202.116.13.244/search*chx?/Xthinking%20in%20java&searchscope=1&SORT=R/Xthinking%20in%20java&
;searchscope=1&SORT=R&SUBKEY=thinking%20in%20java/1%2C3%2C3%2CE/frameset&FF=Xthinking%20in%2
0java&searchscope=1&SORT=R&1%2C1%2C
(该URL不需授权吧?有点怕怕呢……)
将多余的信息去掉,我们可以得出:
SUBKEY=thinking%20in%20java
这其实就是用户提交的关键字。
除了URL,我们还可以用FORM,像在Millennium系统的书目信息页面,仍然提供了检索框,方便用户进行进一步检索,对于该检索框的值,我们可以通过document.form.searcharg.value语句来获取,当然,这是不正规的写法,正规写法是:doucument.getElementsByTagName(”searcharg”).getAttribute(”value”)。
如果说URL和FORM中没有我们想要的值,如本例子中的ISBN号,那么我们只有老老实实的分析DOM,并找出
ISNB号所在的单元格,再通过innerHTML()属性获取相关值。
而上面这一切,都只是通过一段脚本,在用户浏览器上执行的。
那么得到了参数之后,接下来就要和服务器通讯了。
第二节:异步通讯
用户在继续他的操作,而浏览器已经在不打扰用户的情况下,跟我们的服务器通讯了。
这就是XMLHttpRequest对象。
XMLHttpRequest对象可以通过脚本创建,并且可以给服务器发送HTTP请求,当然,毫无疑问的它能接收服务器的反馈。我们通过以下语句创建一个XMLHttpRequest对象:

xRequest=new
XMLHttpRequest();//创建对象,实际上要复杂一些


同时,我们通过onreadystatechange定义它的回调函数,然后将相关参数传送至服务器。

xRequest.onreadystatechange=onReadyState;//定义回调函数

xRequest.open(HttpMethod,url,true);//打开http访问

xReqeust.send(params);//传送相关参数

而在在服务器端,我们接收用户提交的参数,并执行数据库操作,完成后,将相关信息反馈回客户端浏览器。反馈数据的形式可以是txt、html、甚至是JavaScript数组等。

第三节:更新页面的某一部分

客户端浏览器通过侦听回调函数,确定服务器处理完请求后,就可以通过createElement()等方法来实现文档的修改,把相关反馈信息,更新到当前文档即可。代码…..略……

以上三节内容,已经给我们揭示了一个很好的方向,对于一些封闭的WEB应用,我们可以通过Ajax,实现很多原本不可实现的事情。大家一起发挥想象吧~
总结:
呵呵,写着写着,就变成写Ajax了,其实Ajax是非常有用的工具,随着用户“我的地盘我做主”的吼声越来越多,相关技术肯定会不断涌现。保守,只能被淘汰。软件不是什么值钱的东西,服务才是。
看看ORACLE吧,看看GOOGLE吧~

Tags: , , ,