目前这就是我现在正在做的事情:
内容页面有一个按钮,iframe也属于该页面上的另一个服务器。按下按钮时,javascript会从客户端浏览器中获取一些信息。然后使用window.postmessage方法将信息发送到iframe。
我在iframe中放置了一个带有文本字段的表单。当监听器收到postmessage数据(event.data)时,它会使用document.form.textfieldid.value存储到文本字段中,这样我就可以使用document.form.submit()将数据发送到我的servlet。然后,servlet使用request.getparameter()检索数据,执行INSERT查询以将数据存储到数据库中。
这次执行完美无缺。
问题:
我添加了另一个javascript,因此如果再次按下按钮(不重新加载页面),它将抓取另一个数据,并且应该再次执行上面的过程。 window.postmessage已成功接收数据,但POST未执行(可通过netbeans的http监视器查看)。这意味着表格没有提交。
总之,表单仅在第一次按下按钮时才会提交,除非我重新加载页面,否则它将无法再次运行。
我正在使用捆绑在Netbeans 7中的apache Tomcat 7.0.14。
我想知道为什么会这样?有什么误解吗?
这是iframe的代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form name="form" action="databaseServlet" method="post">
<input type="text" id ="output" name ="out" />
</form>
<div id="message"> TEST </div>
<script>
var xmlhttp;
function listener(event)
{
document.form.output.value = event.data ;
document.form.submit()
}
if(window.addEventListener)
addEventListener("message", listener, false)
else
attachEvent("onmessage",listener)
</script>
</body
</html>
解决:
我找到了解决方案。这是我的坏。 POST后我没有设置响应。我只是使用servlet中的sendRedirect(“theiframe.jsp”)将表单重定向到其早期状态,它将能够在不重新加载整个页面的情况下重新发送。