期货完成后返回阿贾克斯回应
问题描述:
我在实习期间遇到问题。我必须执行一个Ajax POST到一个Servlet,该Servlet通过未来发送消息给参与者,并在期货完成后返回响应。这可能吗?期货完成后返回阿贾克斯回应
例子:
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);
}
我怎样才能巧妙地避免使用 “等待” 的?想象一下,“移动”远离服务器的等待时间以及更多基于Actor的应用程序。
对于Ajax“方”想象最简单的Ajax文章,你可以。
我无法想象如何做到这一点! 在此先感谢你们!
答
同步
future.get()
将等待响应回来并为您提供结果。
String hello = (String) future.get();
注意:.get()
方法使呼叫同步。
异步
您可以使用
CompletableFuture.supplyAsync(/* call your AJAX endpoint here */)
.thenAccept(/* display your HELLO String here */);
希望这点你在正确的方向!
编辑
下面是一个例子JS功能,将做一个AJAX POST:
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
事件或什么的。
非常感谢您的回答@Mechkov, 如果您有时间,您可以提供一个脚本示例吗? –
非常感谢!我会看看,但我有点担心ComparableFuture是一个Java 8功能,我不得不使用Java 7. –
然后你不能使用它。这是一个Java 8功能。 – Mechkov