每當我們遇到一些問題時候,我們會百度一下,你是有過我們的問題還沒打完就已經出現的經歷?
如下圖:
天貓:
京東:
這時候的你是否想到如何實現這個功能?
我們的網頁明明沒有刷新,可是卻出現了數據的交互,也就是ajax的強大之處。
下面以一個例子來實現。
搜索框和搜索按鈕,我們希望在搜索框輸入部分書名時,能夠實現書名的自動補全功能。每當點擊了相應的書名,就把內容輸入到搜索框。
對應的代碼
search <input type="text" name="name" class="inputtable" id="name" /> <input type="image" src="images/serchbutton.gif" border="0" style="margin-bottom:-4px">
為了存貯自動補全的文字,我們使用div標簽
設置背景色為白色,絕對布局。并且默認不顯示。
<div id="context1" style="background-color:white; border: 1px solid red;width:128px;position: absolute;top: 133px;left:944px;display:none" > </div>
在百度的補全功能中我們發現,每輸入一個字,對應的補全文字就會更新,所以我們要為搜索框設置鍵盤抬起事件(keyup),然后就是ajax實現異步交互。
js代碼:
$(".inputtable").keyup(function(){ var content=$(this).val(); //如果當前搜索內容為空,無須進行查詢 if(content==""){ $("#context1").css("display","none"); return ; } //由于瀏覽器的緩存機制 所以我們每次傳入一個時間 var time=new date().gettime(); $.ajax({ type:"get", //新建一個名為findbooksajaxservlet的servlet url:"${pagecontext.request.contextpath}/servlet/findbooksajaxservlet", data:{name:content,time:time}, success:function(data){ //拼接html var res=data.split(","); var html=""; for(var i=0;i<res.length;i++){ //每一個div還有鼠標移出、移入點擊事件 html+="<div onclick='setsearch_onclick(this)' onmouseout='changebackcolor_out(this)' onmouseover='changebackcolor_over(this)'>"+res[i]+"</div>"; } $("#context1").html(html); //顯示為塊級元素 $("#context1").css("display","block"); } }); });
我們的鼠標在選擇到自動補全的內容時,我們會發現內容的那一行會變色,即onmouseover事件,離開時恢復原色onmouseout事件,點擊時將內容填寫到搜索框onclick事件。所以在上面的代碼中我們會這樣寫
var html=""; for(var i=0;i<res.length;i++){ //每一個div還有鼠標移出、移入點擊事件 html+="<div onclick='setsearch_onclick(this)' onmouseout='changebackcolor_out(this)' onmouseover='changebackcolor_over(this)'>"+res[i]+"</div>"; }
而其三種事件對應的js代碼如下:
//鼠標移動到內容上 function changebackcolor_over(div){ $(div).css("background-color","#cccccc"); } //鼠標離開內容 function changebackcolor_out(div){ $(div).css("background-color",""); } //將點擊的內容放到搜索框 function setsearch_onclick(div){ $(".inputtable").val(div.innertext); $("#context1").css("display","none"); }
servlet:向server調用相應的業務然后返回查詢的結果
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { response.setcontenttype("text/html;charset=utf-8"); request.setcharacterencoding("utf-8"); //獲取搜索框輸入的內容 string name=request.getparameter("name"); name=new string(name.getbytes("iso-8859-1"), "utf-8"); //向server層調用相應的業務 booksserver booksserver=new booksserver(); string res=booksserver.findbooksajax(name); //返回結果 response.getwriter().write(res); } public void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { doget(request, response); }
service層
把dao層查詢的所有書名拼接為一個字符串。
//查詢所有的書本名 public string findbooksajax(string name) { list<object> namelist=booksdao.findbooksajax(name); string res=""; for (int i=0;i<namelist.size();i++) { if(i>0){ res+=","+namelist.get(i); }else{ res+=namelist.get(i); } } return res; }
dao層
根據部分書名,查詢類似的書名
//根據部分書名,查詢類似的書名 public list<object> findbooksajax(string name) { queryrunner qr=new queryrunner(c3p0util.getdatasource()); try { return qr.query("select name from book where name like ?", new columnlisthandler(),"%"+name+"%"); } catch (sqlexception e) { e.printstacktrace(); } return null; }
運行結果:
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務器之家!
原文鏈接:http://blog.csdn.net/su20145104009/article/details/63279276