如何将ajax响应作为javascript数组返回

时间:2013-11-09 07:37:22

标签: javascript jquery ajax servlets

我正在学习如何使用jquery自动完成,我在ajax中为$ .get方法做​​了一个例子。 我看一下http://jqueryui.com/autocomplete/来举个例子。

在我的jsp页面中:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>AJAX calls using Jquery in Servlet</title>
<link rel="stylesheet" href="jquery-ui.css" />
<script src="jquery-1.9.1.js"></script>
<script src="jquery-ui.js"></script>
<script>
$(function(){
    $('#user').autocomplete({       
        source: function (request, response) {
            var username = $('#user').val();
            $.get('autocompleteServlet', {user : username}, function(responseText){
                $('#welcometext').text(responseText);
                var value = [responseText];
                response(value);
            });
        }
    });
});
</script>
</head>
<body>
    <form id="form1">
        <h1>AJAX Demo using Jquery in JSP and Servlet</h1>
        Enter your Name: <input type="text" id="user" /> <input type="button"
            id="submit" value="Ajax Submit" /> <br />
        <div id="welcometext"></div>
    </form>
</body>
</html>

在servlet中:

@Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        String value = request.getParameter("user");
        System.out.println("user : "+ value);

        try {
            Connection cnn = XJdbc.getConnection();
            String sql = "SELECT Name FROM reported_tasks WHERE Name LIKE '%"+ value + "%'";
            Statement stm = cnn.createStatement();
            ResultSet rs = stm.executeQuery(sql);
            String result = "";
            while (rs.next()) {
                result = result + rs.getString("Name") + ",";
            }
            cnn.close();
            System.out.println("Request :" + result);
            response.setContentType("text/plain");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().print(result);
        } catch (Exception e) {
            System.out.println("Error : " + e.getMessage());
        }

    }

我认为问题是如何将ajax响应作为javascript的数组类型返回。 请帮助我解决这个问题,谢谢所有

1 个答案:

答案 0 :(得分:0)

您的servlet当前的响应会产生类似的内容:

name1,name2,name3,...

response函数正在查找您的案例中的字符串数组,但它可以在其他formats中使用一组对象。

我建议你的servlet输出如下:

{ "names" : ["name1","name2","name3"...,"nameX"] }

您处理上述回复的Javascript将是

        $.get('autocompleteServlet', {user : username}, function(responseText){
            // I assume the next line is for debugging? 
            $('#welcometext').text(responseText);                 
            var obj = $.parseJSON(responseText); 
            response(obj.names);
        });