2016-11-14 63 views
0

我在實習期間遇到問題。我必須執行一個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文章,你可以。

我無法想象如何做到這一點! 在此先感謝你們!

回答

1

同步

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事件或什麼的。

+0

非常感謝您的回答@Mechkov, 如果您有時間,您可以提供一個腳本示例嗎? –

+0

非常感謝!我會看看,但我有點擔心ComparableFuture是一個Java 8功能,我不得不使用Java 7. –

+0

然後你不能使用它。這是一個Java 8功能。 – Mechkov