2013-11-09 34 views
0

我正在學習如何使用jquery自動完成,我做了一個關於ajax中的$ .get方法的例子。 我來看看http://jqueryui.com/autocomplete/來做這個例子。如何返回作爲javascript數組的ajax響應

在我的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()); 
     } 

    } 

我覺得現在的問題是如何返回爲數組類型的JavaScript的Ajax響應。 請幫助我如何解決這個問題,感謝所有

回答

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