基本能实现:
(1):JS:
/*
建立类似google的搜索引擎AJAX异步访问服务器
*/
function searchMe(){
var keyWork=document.getElementById("keyWork");
var s=keyWork.value;
if(s=="") {
return;
}
searchDIVfunction();
//alert(keyWork);
//keyWork.value="正在匹配数据库关键字......";
}
//选中关键字
function selectKeyWork(keyid){
var k= document.getElementById(keyid);
if(k.innerHTML!=""){
document.getElementById("keyWork").value=k.innerHTML;
document.getElementById("SearchListLayer").style.display="none";
}else
return;
}
//关闭层
function closeDiv(){
document.getElementById("SearchListLayer").style.display="none";
}
//层的定位
function searchDIVfunction(){
var sd=document.getElementById("SearchListLayer"); //获得层
var keyT=document.getElementById("keyWork");
//先不显示
sd.style.display="none";
//
var url="myTest.ajaxTest.saveData.do?keyWork="+keyT.value;
//alert(url);
var Http = null;
try{
Http = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
alert(e);
return ;
}
//异常,创建对象失败
if(Http==null){
alert("不能创建XMLHttpRequest对象!");
return false;
}
Http.open("GET",url,true);
Http.send(null);
Http.onreadystatechange=function(){
if(Http.readyState==4){
if (Http.status==200){
var newText=Http.responseText;
//alert(newText);
if(newText=="err"){
return;
}else{
//alert("获得输入框居左:"+keyT.style.left);
sd.style.left=keyT.style.left;
//过滤px
sd.style.top=Number(keyT.style.top.replace("px",""))+17;
sd.style.width="250";
sd.style.display="";
//真正被填充的内容:
sd.innerHTML=newText;
//alert(newText);
}
}else{
alert("请求的页面不存在或存在异常......");
}
}
}
}
(2)HTML:
<div id="rdiv2">
<table width="360" border="0" align="center" cellpadding="0" cellspacing="0" >
<form name="form1" method="post" action="">
<tr>
<td width="23%" >
<input name="keyWork" type="text"
style="left:339; top:30;POSITION: absolute;" onKeyUp="searchMe();" class="myTable" id="keyWork" size="40">
</td>
<td width="23%" ><div align="center">
<label>
<input type="button" style="left:610; top:33;POSITION: absolute;"
name="Submit3" value="搜 索">
</label>
</div></td>
</tr>
</form>
</table>
<div id="SearchListLayer" style="display:none;"></div>
</div>
(3),服务器处理(JAVA):
package com.bonc.dss.myTest.model;
import
//import 其他略
/**
* AJAX测试
* @author 莫小明
* @version 1.0
*/
public class ModifyDataModel extends ImeiModel
{
public static final String DSS = "dss";
//添加
private String teleoperator_desc="";
private String idx_no="";
//修改
private String indexID="";
private String idxNo="";
//删除ID号
private String deleteID="";
//搜索的关键字
private String keyWork="";
//抛出的对象
private String[] updateMsg = null;
//打印
private PrintWriter out=null;
public ModifyDataModel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, BONCExAction action)
{
super(mapping, form, request, response, action);
}
/**
* 处理参数
* @throws Exception
*/
public void processParam() throws Exception
{
//添加参数的获取
teleoperator_desc=General.convertNullToEmpty(request.getParameter("teleoperator_desc"));
idx_no=General.convertNullToEmpty(request.getParameter("idx_no"));
//编辑参数的获取
indexID=General.convertNullToEmpty(request.getParameter("indexID"));
idxNo=General.convertNullToEmpty(request.getParameter("idxNo"));
//删除参数的获取
deleteID=General.convertNullToEmpty(request.getParameter("deleteID"));
//keyWork
keyWork=General.convertNullToEmpty(request.getParameter("keyWork"));
//设置页面的编码方式
response.setContentType("text/html; charset=GBK");
}
/**
* 处理逻辑
* @throws Exception
*/
public void processLogic() throws Exception
{
//添加
if(!(teleoperator_desc.equalsIgnoreCase(""))
&&!(idx_no.equalsIgnoreCase(""))){
this.add();
}
//修改
if(!(indexID.equalsIgnoreCase(""))
&&!(idxNo.equalsIgnoreCase(""))){
this.mod();
}
//删除
if(!(deleteID.equalsIgnoreCase(""))){
this.del();
}
//搜索相似关键字
if(!(keyWork.equalsIgnoreCase(""))){
this.searchKeyWorksList();
}
}
/**
* 搜索
* @throws Exception
*/
private void searchKeyWorksList() throws Exception {
String sql=
" select
to_char(count(*)) as c,TELEOPERATOR_DESC as k \n"+
" from "+DSS+".DMCODE_TELEOPERATORS_T \n"+
" Where
TELEOPERATOR_DESC like '"+this.keyWork+"%' \n "+
" group by TELEOPERATOR_DESC ";
try
{
Datastore ds=dc.retrieve(sql);
out = response.getWriter();
int count=ds.rowCount();
log4j.info("count="+count);
//装入StringBuffer
if(count>0){
StringBuffer strbf=new StringBuffer();
strbf.append("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"
class=\"myTable\">");
//获得记录集长
//循环
for(int i=1;i<=count;i++){
strbf.append("<tr class=\"sStyle\" onClick=\"selectKeyWork('");
strbf.append(i);
strbf.append("');\" onMouseOver=\"this.className='sStyleOver'\" onMouseOut=\"this.className='sStyle'\"> \n ");
strbf.append("<td id=\""+i+"\">");
strbf.append(ds.getItemString(i,"k").trim());
strbf.append("</td> \n ");
strbf.append("<td class=\"reseFont\"
align=\"right\" >");
strbf.append(ds.getItemString(i,"c").trim());
strbf.append(" 结果</td> \n ");
strbf.append("</tr> \n ");
}
strbf.append("<tr>");
strbf.append("<td> </td>");
strbf.append("<td><div align=\"right\"><a href=\"javascript:void(0)\" onClick=\"closeDiv()\">关闭</a> </div></td>");
strbf.append("</tr>");
strbf.append("</table>");
log4j.info(strbf.toString());
out.print(strbf.toString());
}else{
out.print("err");
}
}
catch (Exception e)
{
out.print("err");
}
}
}