為什么我的json數(shù)據(jù)也獲得了,在前臺也有alert提示,但是setContent(json);后就是不在前臺搜索框下面顯示呢
我的各部分代碼如下
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?{
//這些是模擬數(shù)據(jù)
static?List<String>?datas?=?new?ArrayList<String>();
static?{
datas.add("ajax");
datas.add("ajaxpost");
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");
//首先獲得客戶端發(fā)送來的數(shù)據(jù)keyword
String?keyword?=?request.getParameter("keyword");
//獲得關(guān)鍵字后進行處理,得到關(guān)聯(lián)數(shù)據(jù)
List<String>?listData?=?getData(keyword);
//返回json格式
// System.out.println(JSONArray.fromObject(listData));
response.getWriter().write(JSONArray.fromObject(listData).toString());
}
//獲得關(guān)聯(lián)數(shù)據(jù)的方法
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;
}
}<%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>
<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
<html>
??<head>
??<style?type="text/css">
?? #mydiv{
?? position:absolute;
?? left:50%;
?? top:50%;
?? margin-left:-200px;
?? margin-top:-50;
?? }
??</style>
??
??<script?type="text/javascript">
?? var?xmlHttp;
?? //獲得用戶輸入內(nèi)容?的關(guān)聯(lián)信息?的函數(shù)
?? function?getMoreContents(){
?? //首先要獲得用戶輸入的內(nèi)容
?? var?content?=?document.getElementById("keyword");
?? if?(content.value?==?""){
?? return;
?? }
?? //然后要給服務(wù)器發(fā)送用戶輸入的內(nèi)容,因為我們采用的是ajax異步發(fā)送數(shù)據(jù);
?? //所以我們要使用一個對象,叫做XmlHttp對象
?? xmlHttp?=?createXMLHttp();//獲得xmlHttp對象
?? //要給服務(wù)器發(fā)送數(shù)據(jù)
?? var?url?=?"search?keyword="+escape(content.value);
?? //true表示javascript腳本會在send方法之后繼續(xù)執(zhí)行,而不會等待來自服務(wù)器的響應(yīng)
?? xmlHttp.open("GET",?url,?true);
?? //xmlHttp綁定回調(diào)方法,這個回調(diào)方法會在xmlHttp狀態(tài)改變的時候被調(diào)用
?? //xmlhttp的轉(zhuǎn)態(tài)為0-4,我們只關(guān)心4(compete)這個狀態(tài)
?? //所以說,當(dāng)完成之后再調(diào)用回調(diào)方法才有意義。
?? xmlHttp.onreadystatechange?=?callback;
?? xmlHttp.send(null);
?? }
?? //獲得XMLHttp對象
?? function?createXMLHttp(){
?? //對于大多數(shù)瀏覽器都使用
?? var?xmlHttp;
?? if?(window.XMLHttpRequest){
?? xmlHttp?=?new?XMLHttpRequest();
??
?? }
?? //要考慮瀏覽器的兼容性
?? if?(window.ActiveXObject){
?? xmlHttp?=?new?ActiveXObject("Microsoft.XMLHTTP");
?? if?(!xmlHttp){
?? xmlHttp?=?new?ActiveXObject("Msxml.XMLHTTP");
?? }
?? }
?? return?xmlHttp;
?? }
?? //回調(diào)函數(shù)
?? function?callback(){
?? //4代表完成
?? if?(xmlHttp.readyState?==?4){
?? //200代表服務(wù)器響應(yīng)成功
?? //404代表資源未找到,500代表服務(wù)器內(nèi)部錯誤
?? if?(xmlHttp.status?==?200){
?? //交互成功,獲得相應(yīng)的響應(yīng)數(shù)據(jù),是文本格式
?? var?result?=?xmlHttp.responseText;
?? //解析獲得數(shù)據(jù)
?? var?json?=?eval("("+result+")");
?? //獲得數(shù)據(jù)后就可以動態(tài)的顯示這些數(shù)據(jù)了,把這些數(shù)據(jù)展示到輸入框的下面
?? setContent(json);
?? //alert(json);
?? }
?? }
?? }
?? //設(shè)置關(guān)聯(lián)數(shù)據(jù)的展示,參數(shù)代表的是服務(wù)器傳遞過來的關(guān)聯(lián)數(shù)據(jù)
?? function?setContent(contents){
?? //首先獲取關(guān)聯(lián)數(shù)據(jù)的長度,以此來確定生成多少<tr></tr>
?? var?size?=?contens.length;
?? //設(shè)置內(nèi)容
?? for(var?i?=?0;i?<?size;??i++){
?? var?nextNode?=?content[i];//代表的是json格式數(shù)據(jù)的第i個元素
?? var?tr?=??document.createElement("tr");
?? var?td?=?document.createElement("td");
?? td.setAttribute("border",?"0");
?? td.setAttribute("bg_color",?"#FFAFA");
?? td.onmouseover?=?function()?{
?? this.className?=?'mouseOver';
?? };
?? td.onmouseout?=?function()?{
?? this.className?=?'mouseOut';
?? };
?? td.onclick?=?function()?{
?? //這個方法實現(xiàn)的是:當(dāng)用鼠標(biāo)點擊一個關(guān)聯(lián)的數(shù)據(jù)時,所點擊關(guān)聯(lián)數(shù)據(jù)自動設(shè)置為輸入框數(shù)據(jù)
??
?? };
?? var?text?=?document.createTextNode(nextNode);
?? td.appendChild(text);
?? tr.appendChild(td);
?? document.getElementById("content_table_body").appendChild(tr);
?? }
?? }
??</script>
??</head>
??
??<body>
????<div?id="mydiv">
????<!--?輸入框?-->
????<input?type="text"?size="60"?id="keyword"?onkeyup="getMoreContents()"/>
????<input?type="button"?value="百度一下?"?width="50px">
????<!--?下面是內(nèi)容展示區(qū)域?-->
????<div?id="popDiv">
???? <table?id="content_table"?bgcolor="#FFFAFA"?border="0"?cellspacing="0"?cellpading="0">
???? <tbody?id="content_table_body">
???? <!--?動態(tài)查詢出來的數(shù)據(jù)顯示在這個地方?-->
????
???? </tbody>
???? </table>
????</div>
????</div>
??</body>
</html><?xml?version="1.0"?encoding="UTF-8"?> <web-app?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns="http://java.sun.com/xml/ns/javaee"?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"?id="WebApp_ID"?version="3.0"> ??<display-name>ajaxtest</display-name> ??<welcome-file-list> ????<welcome-file>index.html</welcome-file> ????<welcome-file>index.htm</welcome-file> ????<welcome-file>index.jsp</welcome-file> ????<welcome-file>default.html</welcome-file> ????<welcome-file>default.htm</welcome-file> ????<welcome-file>default.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>
2018-01-23
你的77行錯了,應(yīng)該是:?var?nextNode?=?contents[i]; ?少了個s
2017-11-19
我也遇到了同樣的問題,該怎么解決
2017-09-16
我也遇到同樣的問題了,,,,
2017-08-01
第77行 有個地方寫錯了
2017-01-05
我的也出現(xiàn)了這樣的問題,,在瀏覽器上運行時,按下F12后在(document.getElementById("content_table_body").appendChild(tr))上顯示?Uncaught TypeError: Cannot read property 'appendChild' of null,我就直接把(<tbody></tbody>)刪除了,并把getElementById("content_table_body")改成了getElementById("content_table"),這樣就就可以了,,