2016-03-25 12 views
0

Ich mache einen AJAX-POST zu einem Servlet, das mir ein Array zurückgibt. Der Aufruf wird bei einem Onchange-Ereignis ausgelöst. Zum ersten Mal bekomme ich die richtigen Daten. Aber von da an addieren sich die Daten.Veröffentlichen Sie die Ergebnisse bei jedem Änderungsereignis

Zum Beispiel das erste Mal onchange-Ereignis auftritt und Array empfangen enthält [10,11], die korrekt ist.

Das zweite Mal onchange-Ereignis tritt auf, aber das empfangene Array enthält [10,11,12,13], wenn es nur [12,13] hätte sein sollen. Das Änderungsereignis wird ein noch längerer Datensatz sein.

Ich versuchte mit Cache: falsche und gleiche Ergebnisse. Bitte um Rat.

$('#drivername1').on('change', function() { 
    $.post("statChartServlet", {driverName : this.value}, function(responseText) { 
     alert(responseText); //this is the array data that keeps increasing 
    }); 
}); 

Servlets

private ArrayList<String> tempArr = new ArrayList<String>(); 
protected void doPost(HttpServletRequest request, 
          HttpServletResponse response) throws ServletException, IOException { 

     String driverName = request.getParameter("driverName"); 

     Connection conn = null; 

     try{ 
      DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
      conn = DriverManager.getConnection(dbURL, dbUser, dbPass); 

      Statement statement = conn.createStatement(); 
      ResultSet resultset = 
        statement.executeQuery("select racename from race WHERE drivername = '" + driverName + "'"); 

      while(resultset.next()) { 
       tempArr.add(resultset.getString(1)); 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 


     //response section 
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     String[] strArr = tempArr.toArray(new String[tempArr.size()]); 
     PrintWriter out = response.getWriter(); 
     out.write(Arrays.toString(strArr)); 
    } 
+0

was ist es Server-Seite verarbeiten? ein bisschen mehr Informationen über den Anwendungsfall dieses Prozesses könnte nützlich sein, da es möglicherweise kein technisches Problem ist, eher ein Code-Fehler in der Server-Verarbeitung –

+0

@ H.B Ich habe das Backend für Servlet oben in Java hinzugefügt. – JasSy

Antwort

2

Diese Linie hier private ArrayList<String> tempArr = new ArrayList<String>();

Es zwischen Anforderungen bestehen bleibt. Setzen Sie es in doPost. Im Idealfall sollten Servlets zustandslos sein, um solche Fehler zu vermeiden.

+0

Nein. Das Servlet bleibt für immer am Leben ... oder bis die Webapp offline geschaltet wird. So ist diese Arraylist für alle Anfragen verfügbar. –

+0

Danke Eric. Ich wusste nie, dass Servlets das tun werden. –

Verwandte Themen