当我尝试使用带有按钮的ajax执行方法时,我在div的页面末尾插入一个文本,一切都是正确的:
但是当我尝试使用带有html文本组件的onkeypress的ajax执行方法时,它只显示ajax响应文本而不显示我在视图中的其他组件:
我需要在Internet Explorer上工作
有什么问题?
观点:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="${pageContext.request.contextPath}/views/test.js"
type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>
<body>
<form action="test" method="post">
<div id="div1">
<table>
<tr>
<td><span>Code: </span></td>
<td><input id="field1" name="field1" onkeypress="javascript:insertOnKeyPress()"
type="text" /></td>
<td><input id="method" name="method" type="hidden"
value="insert" /></td>
<td><input id="insert" name="insert" onclick="insertButton();"
type="button" value="Insert"></td>
</tr>
</table>
</div>
<div id="div2"></div>
</form>
</body>
</html>
servlet:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@WebServlet("/sc/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Logger logger = LoggerFactory.getLogger(TestServlet.class);
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
String method = null;
try {
method = request.getParameter("method");
System.out.println(method);
if (method == null) {
getServletConfig().getServletContext().getRequestDispatcher("/views/test.jsp").forward(request, response);
} else if ("insert".equals(method)) {
System.out.println(request.getParameter("param1"));
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("response text");
}
} catch (Exception exception) {
}
}
}
包含以下方法的javascript文件:
function insertOnKeyPress() {
var tecla = window.event.keyCode;
if (tecla == 13) {
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.xmlHttp");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.xmlHttp");
} catch (E) {
xmlHttp = false;
}
}
if (!xmlHttp) {
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
document.getElementById("div2").innerHTML = xmlHttp.responseText;
}
};
xmlHttp.open("POST", "test", true);
xmlHttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xmlHttp.send("method=insert¶m1=param_test");
}
}
function insertButton() {
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.xmlHttp");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.xmlHttp");
} catch (E) {
xmlHttp = false;
}
}
if (!xmlHttp) {
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
document.getElementById("div2").innerHTML = xmlHttp.responseText;
}
};
xmlHttp.open("POST", "test", true);
xmlHttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xmlHttp.send("method=insert¶m1=param_test");
}
答案 0 :(得分:1)
更改insertOnKeyPress
以阻止 Return 键的默认操作,即提交表单。
if (tecla == 13) {
var xmlHttp = false;
window.event.preventDefault();
...
顺便说一句,您在javascript:
属性的开头不需要onkeypress
。在onXXX
属性中永远不需要这样做,只有在您将Javascript放入包含网址的属性(例如href
或{{1})时才需要它}。