期货完成后返回Ajax响应

时间:2016-11-14 13:23:49

标签: java jquery ajax akka actor

我在实习时遇到问题。我必须对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帖子。

我无法知道如何做到这一点! 先谢谢你们!

1 个答案:

答案 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