我在实习时遇到问题。我必须对Servlet执行Ajax POST,它通过将来向actor发送消息,并在期货完成后返回响应。这可能吗?
示例:
public void resultRetrieveAsync(HttpServletRequest request, HttpServletResponse response) throws Exception {
ActorRef sender = i create this sender someway;
Future<Object> future = Patterns.ask(sender, "HELLO", 5000);
//Let's imagine another actor has to respond "Hello Sender"
String hello = (String)Await.result(future, new Timeout(5000).duration());
PrintWriter out = response.getWriter();
out.print(hello);
}
我如何巧妙地避免使用它&#34; Await&#34;?想象一下&#34;移动&#34;远离服务器的等待时间以及基于Actor的应用程序的更多等待。
对于Ajax&#34; side&#34;想象一下你能做的最简单的Ajax帖子。
我无法知道如何做到这一点! 先谢谢你们!
答案 0 :(得分:1)
<强>同步强>
future.get()
会等待回复并提供结果。
String hello = (String) future.get();
注意:.get()
方法使呼叫同步。
<强> ASYNC 强>
您可以使用
CompletableFuture.supplyAsync(/* call your AJAX endpoint here */)
.thenAccept(/* display your HELLO String here */);
希望这能指出你正确的方向!
修改强>
这是一个将执行AJAX POST的JS函数示例:
function myFunction() {
$.ajax({
type: 'POST',
url: 'SOME_URL', //Make sure you put the correct endpoint URL here!
data: MY_DATE, //form data, or whatever here
contentType: 'application/json',
success: function(data) {
//DO SOMETHING HERE AFTER YOU GET THE RESPONSE
},
error: function(jqXHR, textStatus, errorThrown) {
//Do something on ERROR here
}
});
}
之后,只需在myFunction()
事件或其他任何事件上致电click
。