2016-01-04 5 views
0

J'essayais d'utiliser HTML5 SSE dans l'application grails. Voici un exemple de code dans l'action:HTML5 SSE In Grails

def push(){ 
    println "Inside action..." 
    response.setContentType("text/event-stream"); 
    response.setCharacterEncoding("UTF-8"); 
    render("data: ${System.currentTimeMillis()}"); 
} 

code côté client:

<script type="text/javascript"> 
    if(typeof(EventSource) !== "undefined") { 
     var source = new EventSource("push"); 
     source.onmessage = function(event) { 
      console.debug("event triggered..."); 
      document.getElementById("result").innerHTML += event.data + "<br>"; 
     }; 
     source.onerror = function(event) { 
      console.log(event.message); 
     } 
    } else { 
     document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events..."; 
    } 
</script> 

Mais l'événement onmessage ne reçoit pas déclenché. onerror est déclenché et imprime undefined.It frappe l'action correcte mais ne transmet pas les données.

J'ai aussi essayé:

response.outputStream.write(...........) 
response.outputStream.flush() 

mais ne fonctionne pas.

Veuillez nous suggérer.

Répondre

0

Eh bien, je l'ai résolu. J'ai utilisé:

PrintWriter writer = response.getWriter(); 

    writer.write("data:"+System.currentTimeMillis()+"\n\n") 

et cela a fonctionné.

+0

Bonjour Vivek, comment avez-vous réussi à vider les données et à éviter que la connexion ne soit fermée une fois le contrôleur/l'action terminé? – user3621841