【发布时间】:2016-01-29 18:18:00
【问题描述】:
我是 ajax 初学者。我正在尝试编写一个简单的搜索建议。当我使用 firefox 测试时它工作了,但是当我使用 chrome 时,我得到了:Uncaught TypeError: Cannot read property 'getElementsByTagName' of null
我在回调函数上写了这个
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = xhr.responseXML;
var x = data.getElementsByTagName("suggestion");
var div = document.getElementById("suggest")
div.innerHTML = "";
showSuggest();
for (var i = 0; i < x.length; i++) {
var result= x[i].firstChild.nodeValue;
div.innerHTML += "<div id='sResult' onmouseover='over(this)' onmouseout='out(this)' onclick='replace(this)' >"
+ result+ "</div>";
}
}
}
这在 Servlet doGet 方法上:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("test/xml;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
String keyword = request.getParameter("keyword");
//get suggestion from db
List<KeyWord> kw = SearchService.suggest(keyword);
PrintWriter pw = response.getWriter();
pw.println("<?xml version='1.0' encoding='UTF-8'?>");
pw.write("<suggestions>");
for(KeyWord k:kw){
pw.write("<suggestion>");
pw.write(k.getContent());
pw.write("</suggestion>");
}
pw.write("</suggestions>");
pw.flush();
pw.close();
}
【问题讨论】:
-
Java 具有创建格式良好的 XML 的 API,因此请考虑使用它们而不是进行字符串连接。如果
k.getContent()包含与符号&或小于号<,则您的响应不是格式正确的XML。不知道是不是这个错误的原因,在 Chrome 或 IE 中按 F12 打开开发者工具并检查网络控制台的 HTTP 响应头和代码。
标签: ajax xml google-chrome servlets