Ajax學習二----實現輸入框的動態提示。


Ajax學習采用Eclipse,

輸入a自動提示以下內容。選擇下拉框內容變化到輸入框內。

 

 

首先建立前台頁面:search.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
  
  <style type="text/css">
   #mydiv{
    position:absolute;
    left:50%;
    top:50%;
    /*先居中在調試 */
    margin-left:-200px;
    margin-top:-50px;
   }
   .ky{
     border:1px solid ;
     height:20px;
   }
   .mouseOver{
    background:#708090;
    color:#fff;
   }
   .mouseOut{
    background:#FFFAFA;
    color:#000000;
   }
  </style>
 <script type="text/javascript">
   var xmlHttp;
  function getMoreContents(){
	  //獲得用戶輸入的關聯內容
	  var content = document.getElementById("keyword");
	  if(content.value ==""){
		 clearContent();
		 return;
	  }
	  
	  //給服務器發送數據 ,采用的是 Ajax異步傳輸數據。
	  //所以建立一個Ajax的對象xmlHttp,
	  xmlHttp = createXMLHttp();//xmlhttp= 獲得 XmlHttp的對象 ; 
	  //要給服務器發送數據
	  var url ="search?keyword="+escape(content.value);
	  xmlHttp.open("GET",url,true);//true表示會在send()方法之后繼續執行。
	  //xmlhttp綁定回調方法 ,當xmlHttp的狀態改變的時候才會調用 此方法 
	  //xmlhttp的四種狀態我們只關心狀態4:(complete),所以說在完成之后調用回調方法才有意義
	  
	  xmlHttp.onreadystatechange = callback;//onreadystatechange在這里是小寫不能大寫 。
	  xmlHttp.send(null);
	 //alert(xmlHttp);
  }
   //創建XMLHttp對象的函數 
  function createXMLHttp(){
	  var xmlHttp;
	  if(window.XMLHttpRequest)
		  {
		     xmlHttp = new XMLHttpRequest();
		  }
	  if(window.ActiveXObject){
		  xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
		  if(!xmlHttp){
			  xmlHttp = new ActiveXOject("Msxml2.HTTP");
			  
		  }
	  }
	  return xmlHttp;
  }
  //回調函數 
  function callback(){
	  if(xmlHttp.readyState == 4){
		  //4代表完成200代表服務器響應 、 404代表資源未找到 ,500代表 內部出現錯誤 
		  if(xmlHttp.status == 200){
			  //定義交互成功時候,獲取的數據是 Text數組的格式 。
			  var result = xmlHttp.responseText;
			  //結息獲取數據 
			  var json = eval("("+result+")");
			  //獲得數據后就可以動態的展示數據了,並把數據展示在下拉框的下方 ,
			  //在這里打印一下json,看看是否前后台交互成功
			 
			    setContent(json);//將json數據傳輸到setContent()方法中
		  }
	  }
  }
  //設置關聯數據的展示,參數代表的是服務器傳遞過來的關聯數據 
  function setContent(contents){
	  
	  clearContent();

	  setlocation();
	  //首先獲得關聯數據的長度,依次來確定生成多少tr,td
	  var size =contents.length;
	  //設置內容
	  for(var i=0;i<size;i++){
		  var nextNode = contents[i];//代表的是Json數據格式的第i個元素
		  var tr = document.createElement("tr");
		  var td = document.createElement("td");
		  td.setAttribute("border","0");
		  td.setAttribute("bgcolor","#FFFAFA");
		  
		//為td綁定兩個樣式(鼠標進入和鼠標移出時事件)
          td.onmouseover = function(){
              this.className = 'mouseOver';
              document.getElementById("keyword").value=this.innerHTML;
          };
          td.onmouseout = function(){
              this.className = 'mouseOut';
          };
		  td.onclick = function(){
			  //方法實現的是,選擇關聯數據,自動設置為輸入框數據 
		  };
		  //創建一個文本節點 
		  var text = document.createTextNode(nextNode);
		  td.appendChild(text);
		  tr.appendChild(td);
		  document.getElementById("content_table_body").appendChild(tr);
		  //表示數據 
	  }
  }
  //清空數據的方法 
  function clearContent(){
	 var contentTableBody = document.getElementById("content_table_body");
     var size = contentTableBody.childNodes.length;
     for(var i=size-1;i>=0;i--){
      contentTableBody.removeChild(contentTableBody.childNodes[i]);
     }
     document.getElementById("popDiv").style.border="none";
  }
  function keywordBlur(){
	  clearContent();
  }
  
  function setlocation(){
	  
	  var content=document.getElementById("keyword");
	  var width=content.offsetWidth;
	  var left=content["offsetLeft"];
	  var top=content["offsetTop"]+content.offsetHeight;
	
	  var popDiv = document.getElementById("popDiv");
	  popDiv.style.border="black 0px solid";
	  popDiv.style.left=left+"px";
	  popDiv.style.top=top+"px";
	  popDiv.style.width=width+"px";
	  document.getElementById("content_table").style.width=width+"px";
	 
  }
 </script>
</head>
<body>
  <div id = "mydiv">
   <input  class="ky" type ="text" size ="50" id = "keyword" onkeyup="getMoreContents()"
   onblur = "keywordBlur()" onfocus="getMoreContents()"/>
   <input type="button" value = "百度一下" width = "50px"/>
   <!-- 下面是內容的展示區域 -->
   <div id ="popDiv">
   <table id = "content_table" bgcolor="#FFFAFA" border= "0" cellspacing="0" cellpadding = "0">
   <tbody id="content_table_body">
   <!-- 動態查詢的數據顯示在這個地方 -->
   
   </tbody>
   </table>
   </div>
  </div>
</body>
</html>

  配置web.xml,新建web.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version = "2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >
    <display-name></display-name>
    <welcome-file-list>
        <welcome-file>search.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>search</servlet-name>
        <servlet-class>com.imooc.SearchServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>search</servlet-name>
        <url-pattern>/search</url-pattern>
    </servlet-mapping>
</web-app>

  添加json包,到lib中,全選中,右鍵Build-path

https://pan.baidu.com/s/1KBrbwj1nAwrVGMuOe-iQPQ

編寫后台代碼:

package com.imooc;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

public class SearchServlet extends HttpServlet {
//2018-8-3呂澤坤
	static List<String> datas = new ArrayList<String>();
	static{
		
		datas.add("ajax");
		datas.add("ajax post");
		datas.add("becky");
		datas.add("bill");
		datas.add("james");
		datas.add("jerry");
	}
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		System.out.println("123");
		//首先獲得客戶端發過來的數據keyword
		String keyword = request.getParameter("keyword");
		//獲得關鍵字之后進行處理,得到關鍵數字
		List<String> listData = getData(keyword);
		
		//返回Json格式
		//System.out.println(JSONArray.fromObject(listData));
	    response.getWriter().write(JSONArray.fromObject(listData).toString());
	}
     //獲得關聯數據的方法
	public List<String> getData(String keyword){
		
		List<String> list =new ArrayList<String>();
		for(String data:datas){
			if(data.contains(keyword)){
				list.add(data);
			}
		}
		return list;
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM