2016-03-25 9 views
0

私は配列を返すサーブレットに対してajax POSTを行っています。呼び出しはonchangeイベントでトリガーされます。初めて私は正しいデータを受け取ります。しかし、それ以降、データは積み重なっていきます。変更イベントごとに結果がポストします

たとえば、最初にonchangeイベントが発生し、受信された配列に正しい[10,11]が含まれています。

2回目のオンイベントが発生しますが、受け取った配列に[10,12,13]が含まれている必要があります。 Thir changeイベントはさらに長いデータセットになります。

私はキャッシュで試しました:偽と同じ結果。ご意見をお聞かせください。

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

右ここサーブレット

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

処理側は何ですか?技術的な問題ではなく、むしろサーバー処理のコードバグ –

+0

@ H.B上記のServletのバックエンドをJavaで追加しました。 – JasSy

答えて

2

このラインprivate ArrayList<String> tempArr = new ArrayList<String>();

これは、要求の間持続します。それをdoPostの中に入れてください。理想的には、このようなバグを防ぐために、サーブレットはステートレスでなければなりません。

+0

サーブレットは永遠に生き続けるか、Webアプリケーションがオフラインになるまで保持されます。 arraylistはすべてのリクエストに利用可能です。おかげさまで –

+0

サーブレットがそれを行うことは決して知らなかった。 –

関連する問題