2016-04-03 14 views
1

Ich versuche, ein Java-Servlet zu erhalten, um HTML als Antwort auf eine Anfrage von einer JavaScript-Funktion zu senden. Während die Servlet-Funktion aufgerufen wird und scheinbar eine Antwort sendet, erhalten die Javascript-Funktionen jedoch nur eine leere Zeichenfolge. HierJava-Servlet-Antwort auf JavaScript

ist die Servlet-Methode:

String type = request.getParameter("type"); 
if(type.equals("locos")) { 
      response.setContentType("text/html"); 

      //this prints out 
      System.out.println("Responding with vehicle list"); 

      //deal with response 
      PrintWriter out = response.getWriter(); 
      out.write("<p>test response</p>"); //finish 
     } 

Hier ist die JavaScript-Funktion:

this.updateVehicleList = function() { 
     var type = "locos"; 

     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),true); 
     xhr.send(null); 

     //deal with response 
     var res = xhr.responseText; 

     //for testing 
     if (res == "") { 
      window.alert("I'm getting nothing"); 
     } 

     view.showVehicleList(res); 
    }; 

Die "Ich bin immer nichts" -Meldung gibt jedes Mal. Wie bekomme ich das JavaScript, um die Antwort vom Servlet tatsächlich zu erhalten?

+0

Verwandte: [? Wie Servlets verwenden und Ajax] (http://stackoverflow.com/questions/4112686/how-to-use-servlets-and-ajax) – BalusC

Antwort

1

Sie führen eine asynchrone Anfrage durch und daher ist die Antwort nicht sofort verfügbar. Sie versuchen, die responseText zu erhalten, bevor die Antwort überhaupt empfangen wurde.

die onreadystatechange Ereignis Verwendung:

... 
... 
xhr.send(null); 

xhr.onreadystatechange = function() { 
    if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200){ 
     //deal with response 
     var res = xhr.responseText; 

     //for testing 
     if (res == "") { 
      window.alert("I'm getting nothing"); 
     } 

     view.showVehicleList(res); 
    } 
}; 

Wenn Sie eine synchrone Anforderung zu machen beabsichtigen, setzen dann das dritte Argument zu false und wird Ihr Original-Code arbeiten.

xhr.open('GET', 'GetList?type=' + encodeURIComponent(type),false); 
//               ^^^^^ 
+0

Das funktionierte. Vielen Dank. – Cailean