如何在jsp中使用ajax制作jquery自动完成ui

Posted

技术标签:

【中文标题】如何在jsp中使用ajax制作jquery自动完成ui【英文标题】:how to make jquery autocomplete ui using ajax in jsp 【发布时间】:2018-07-23 22:32:10 【问题描述】:

我的问题是 jQuery UI AutoComplete 在我的 JSP 中无法使用 AJAX。我找到了很多指南,但我找不到解决问题的方法。

在这种情况下我能做什么?

<%-- 
    Document   : Auto
    Created on : Feb 13, 2018, 4:24:31 PM
    Author     : Lenovo
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
        <link rel="stylesheet" href="/resources/demos/style.css">
        <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
        <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        <title>JSP Page</title>
    </head>
    <body>


        <div class="ui-widget">
            <input type="text" id="auto"/>  
        </div>


        <script type="text/javascript">
           $(function()
           
            $('#auto').autocomplete(
            
            source:function(request,response)
            
            //Fetch data
            $.ajax(
                url:"Fetch.jsp",
                method:"post",
                dataType:'json',
                data:search:request.term,
                success:function(data)
                
                    response(data.name);
                
            );
            
            );   
           ); 
        </script>

    </body>
</html>

这是我的 Fetch.jsp 文件:

<%@page import="org.json.JSONArray"%>
<%@page import="org.json.JSONObject"%>
<%@ page contentType="text/html; charset=iso-8859-1" language="java"%>
<%@page language="java" %>
<%@page import="java.sql.*" %>
<%
    try
    
        String query = (String)request.getParameter("search");

        JSONObject json=new JSONObject();


        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/sample","root","root");
        Statement st=con.createStatement();
        ResultSet rs;

        rs=st.executeQuery("select name from user2 where name like '"+query+"%'");
       while(rs.next())
       
         json.put("name",rs.getString("name"));
         out.print(json.toString());   
       

      
      catch(Exception e1)
      
      out.println(e1);
      
%> 

【问题讨论】:

【参考方案1】:

Fetch.jsp 应该打印一个 json 数组,而不是一个对象。 您实际上不是在打印有效的 json,而是按顺序打印 json 对象。您应该打印从数据库中获得的字符串数组。

变化:

JSONObject json=new JSONObject();

JSONArray json=new JSONArray();

还有变化

while(rs.next())

     json.put("name",rs.getString("name"));
     out.print(json.toString());   

while(rs.next())

     json.put(rs.getString("name"));

out.print(json.toString());

最后在你的 js 中:

success:function(data)

    response(data);

来自文档:

response 回调,它需要一个参数:向用户建议的数据。应根据提供的术语过滤此数据...在提供自定义源回调时,处理请求期间的错误很重要。即使遇到错误,您也必须始终调用响应回调。这可确保小部件始终具有正确的状态。

参考文献

Jquery UI Autocomplete API source: array, string or callback

【讨论】:

以上是关于如何在jsp中使用ajax制作jquery自动完成ui的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JQuery UI 自动完成中使用 source:function()... 和 AJAX

如何在使用 Jquery Autocomplete 和 JSP 时设置自动完成输入框的值

如何在带有 ADO.NET 的 ASP.NET Core MVC 中使用 jQuery Ajax 自动完成

如何在 Laravel 5.7 中将多个数据库数据传递到 jQuery 的自动完成(AJAX)中

如何在自动完成jQuery中制作粗体匹配文本

在我的 ajax 成功中使用自动完成事件