好吧,也许这是一个非常常见的问题,但我找不到合适的答案......
我有一个Java函数(实际上,是一个Servlet),我需要/尝试做的是这个:
在做了一些事情之后,我需要在我的代码中做一些其他事情之前显示一个“确认”窗口...我这样做是通过javascript,这样:
out.println("<script type='text/javascript'>");
out.println("result = confirm(Do you wanna to record in DB?)");
out.println("if(result)");
out.println(" alert('will record');");
out.println("else");
out.println(" alert('will not record')");
out.println("</script>");
out.flush();
但该代码之后的行将在显示对话框消息之前执行。所以,现在我想调用不同的函数(我有警报的地方)。我的Java类/ servlet中的函数...
那么......如何在我的javascript代码中调用Java函数?或者我需要做些什么来让我的代码等到我确认我的消息之后呢?
谢谢
答案 0 :(得分:2)
首先,你需要清楚地了解各自代码的执行情况......以及何时。
在HTML及其嵌入式Javascript发送到浏览器之前,JSP代码在服务器端执行。
在浏览器收到HTML及其嵌入式Javascript后,浏览器大小会执行Javascript代码。
所以你想要的是Javascript要求确认,然后将记录保存到数据库中。显然,记录不应该被JSP保存......或者至少不能无条件地保存。必须发生的是,单击确认按钮必须使Javascript向服务器发送请求以确认操作已确认。顺序是:
确认互动有两种结构方式:
在后一种情况下,请求可以由与原始请求相同的处理程序处理,也可以由不同的处理程序处理。
答案 1 :(得分:1)
通常,javascript在浏览器上运行,Java类在servlet容器中运行。您可以通过java实现javascript和数据操作的逻辑。 Jquery将帮助您轻松使用ajax。
out.println("<script type=\"text/javascript\" src=\"http://code.jquery.com/jquery-1.10.0.min.js\"></script>");
out.println("<script type='text/javascript'>");
out.println("result = confirm(Do you wanna to record in DB?)");
out.println("if(result) {");
out.println(" alert('will record');");
out.println("$.ajax({" +
"type: \"POST\"," +
"url: \"/your_servlet_url\"," +
"data: \"action=record\"," +
"success: function(msg) {" +
" alert( \"Data Saved: \" + msg );" +
"}" +
"});");
out.println("} else {");
out.println(" alert('will not record');");
out.println("$.ajax({" +
"type: \"POST\"," +
"url: \"/your_servlet_url\"," +
"data: \"action=norecord\"," +
"success: function(msg) {" +
" alert( \"Data Saved: \" + msg );" +
"}" +
"});");
out.println("}");
out.println("</script>");
out.flush();
然后,您需要获取参数操作值,并在servlet中执行您想要的操作。
答案 2 :(得分:1)
不幸的是,你的问题的答案基本上是&#34;你不能这样做#34;,至少不是你想象的方式。 servlet通过HTTP协议与浏览器通信,浏览器只能理解完整网页,每个HTTP请求一个。即使浏览器确实显示了警告框,您的服务器代码也无法知道用户是否单击了它,因为单击警报不会自动生成HTTP请求。每当您想要将数据发送回服务器时,都需要新的HTTP请求,包括表示用户点击确定的事实的数据。
在响应完成之前,浏览器不会呈现页面。每个请求都从servlet获得一个响应。您必须完成整个响应并立即发送。您可以在确定要发送的响应时使用 Java 代码中的if语句,但是在浏览器收到完成的请求之前,javascript或html中的任何内容都不会运行。当您拨打同花顺时,您只发送了仍然不完整页面的最新部分(您尚未发送</body></html>
并关闭了连接,因此它不完整)。
最终结果是,您无法通过响应向用户询问他们想要的内容,或者在您生成响应时向他们发送消息(即您的警报)。
如果您想要征求用户输入(包括按钮点击)并回复它,您必须发送一个简单但完整的页面来请求用户的输入,然后您可以执行以下操作之一:
要记住的核心是浏览器和服务器是独立的机器,只能通过源自浏览器的http请求进行通信。除响应请求外,服务器无法联系浏览器。
答案 3 :(得分:0)
你需要一些宁静的电话。如果要在此javascript对象XMLHttpRequest()
中实现自定义rest api外观或只使用html表单。将它指向httpservlet正在侦听的位置。缺点是你只能获得发布并获得。例如<form action="your server" method="get/post" />