每个更改事件的发布结果都会增加

时间:2016-03-25 03:18:03

标签: java jquery ajax

我正在向一个servlet发一个ajax POST,它返回一个数组。该调用是在onchange事件上触发的。我第一次收到正确的数据。但从那时起,数据不断增加。

例如,第一次发生onchange事件并且接收的数组包含[10,11],这是正确的。

第二次onchange事件发生但接收到的数组包含[10,11,12,13],它应该只是[12,13]。 Thir change事件将是一组更长的数据。

我尝试使用cache:false和相同的结果。请指教。

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

的Servlet

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));
    }

1 个答案:

答案 0 :(得分:2)

此行private ArrayList<String> tempArr = new ArrayList<String>();

它在请求之间持续存在。把它放在doPost里面。理想情况下,servlet应该是无状态的,以防止这样的错误。