近日新看了几篇关于ajax的文章准备试试新,至于方式我选择了在jsp页面中使用ajax,至于如何在servlet和struct中使用在后续几天我会分别试验一下。
实现描述:很简单的例子,就是用户在注册的时候当输入完用户名后,自动去数据库中查询,如果用户名重复则提示用户。
知识点:ajax的使用,相关控件事件,jscript中动态生成HTML(innerHTML)
过程描述:至于大体过程,我就不赘述了,只是说说在过程中遇见的疑惑和解决办法。
一、关于Input控件中onClick,onChange,onFocus三个事件的选择。我的第一个想法是在用户单击“密码”输入框的时候通过ajax机制去查询数据库,如果这样的话我会在“密码”输入框中运用onClick事件,但是通过实验证明这个过程中存在一个漏洞就是用户如果不用鼠标移动焦点而是使用TAB键来切换焦点那么是不会触发ajax检测机制的~~~~cut!!!
再来说说onFocus事件,这个造成的后果就是如果光标在某个待触发ajax机制的输入框的时候,会不停的触发检测函数,如果你用alert测试的话,他会不知疲倦的再次跳出来~~~~cut!!!
最后说说onChange事件,他的触发是建立在输入框中的文字产生变化,并且焦点从该输入框离开的时候才触发,所以他才是最适合的~~~~ok!!!
二、再来说说ajax返回值的问题,js中通过http_request.responseText获得服务器端程序的输出,所谓的服务器端输出也就是一个jsp页面中out.print语句向客户端送出的信息。我的思路是:如果数据库中有重复用户才对客户端产生输出,如果没有则通过检测responseText的长度为0或者是否为空(这点我没有核实输出是“”还是null)来界定。但是问题出来了即使什么都不输出的时候,客户端接受的字符串都不符合上述我假想的长度为0和null的情况,最小长度总是为4,后来在实在无奈的情况下我使用了自己写的js中trim函数处理它,这回得以解决,所有的未知字符被滤除,哈哈,我突然又有了一种想法是不是如果我在jsp页面输出之前执行out.clear()也能解决问题呢?呵呵,明天验证一下了。
三、最后说说关于动态生成HTML的问题,因为innerHTML对div标签包含td标签不敏感,所以以前我总是在js中重写整个tr标签的内容,这样做很讨人烦的,尤其在tr中的内容还有服务器端的内容~~~~想都懒得想!这回在写的时候突然想起了label标签,实验证明直接innerHTML操作label中的内容是相当方便的。
明天回到单位,我会把这段代码贴出来
四、关于js中许多基本功能,我们可以去网络上搜集,我目前用的js函数库就是从网络上一点点收集来的,涉及到了许多基础验证功能,比较好用。明天我单开专题共享出来,呵呵~~~
总结:只是想为其他人少走弯路,自己巩固知识而做的微薄努力,希望真正的高手给与指点,谢谢!