Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ajax从servlet获取数据?_Java_Javascript_Jquery_Ajax_Servlets - Fatal编程技术网

Java 如何使用ajax从servlet获取数据?

Java 如何使用ajax从servlet获取数据?,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,首先,这看起来像是重复的,但我向你保证,我已经尝试了很多问题,但仍然没有得到正确的答案。所以我在这里问这个问题 我有一个HTML表单,我想从中向servlet提交一个查询,并以不同的分区显示结果 我的HTML代码基本上由以下内容组成: <form> <input name="query" id="query" placeholder="Query"> <button id="searchDoc">Search</button> &l

首先,这看起来像是重复的,但我向你保证,我已经尝试了很多问题,但仍然没有得到正确的答案。所以我在这里问这个问题

我有一个HTML表单,我想从中向servlet提交一个查询,并以不同的分区显示结果

我的HTML代码基本上由以下内容组成:

<form>
    <input name="query" id="query" placeholder="Query">
    <button id="searchDoc">Search</button>
</form>
<div id="search-results"></div>
我的
QueryServlet
是:

@WebServlet("/QueryServlet")
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public QueryServlet() {
    super();
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    String query = request.getParameter("query");
    QueryUtil qu = new QueryUtil();
    String mySqlQuery = qu.buildMySQLSearchQuery(query);
    System.out.println(mySqlQuery);
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;
    try {
        con = new DbConnection().getConnection();
        st = con.createStatement();
        rs = st.executeQuery(mySqlQuery);
        if(rs != null) {
            response.setStatus(HttpServletResponse.SC_OK);
            while(rs.next()) {
                out.println("<a href=\"DownloadServlet?docId=" + rs.getInt("id") + "\">" + rs.getString("fileName") + "</a>");
            }
        } else {
            // TODO add keywords to database
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}
@WebServlet(“/QueryServlet”)
公共类QueryServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公共QueryServlet(){
超级();
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
PrintWriter out=response.getWriter();
字符串查询=request.getParameter(“查询”);
QueryUtil qu=新的QueryUtil();
字符串mySqlQuery=qu.buildMySQLSearchQuery(查询);
System.out.println(mySqlQuery);
连接con=null;
语句st=null;
结果集rs=null;
试一试{
con=new DbConnection().getConnection();
st=con.createStatement();
rs=st.executeQuery(mySqlQuery);
如果(rs!=null){
response.setStatus(HttpServletResponse.SC_OK);
while(rs.next()){
out.println(“”);
}
}否则{
//TODO向数据库添加关键字
}
}捕获(SQLE异常){
e、 printStackTrace();
}
}
/**
*@请参阅HttpServlet#doPost(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doPost(HttpServletRequest请求、HttpServletResponse响应)引发ServletException、IOException{
}
}
即使在提交有效查询时,div也不会从servlet加载数据。数据到达servlet并显示在控制台中,但我无法从脚本中检索该数据。
标记相当于一个
。如果您在
表单
标记中未声明任何
操作
属性,则标准操作会导致页面重新加载。这导致,尽管返回的数据被插入到
#search results
div中,但您永远无法看到它们,因为页面会立即重新加载

您应通过以下方式停用默认的“提交”按钮:

$('#searchDoc').click(function(e) {
      e.preventDefault();
      [....]
  });

这应该可以解决你的问题

这个问题似乎与上下文路径有关,如果servlet不在上下文根目录中,则您的路径应该如下所示:-

<host> / <context path>/ <servlet>
//

谢谢:)

您收到警报了吗?如果你使用的是Chrome,你应该打开开发者工具,在那里你可以看到浏览器和服务器之间实际传输的内容。警报处的断点从未到达。我认为您的问题是jQuery ajax中的
url
参数。看看这是否有效:
url:“/QueryServlet”
@BuhakeSindi查询确实到达servlet,因为我确实在服务器端打印了控制台消息。使用此按钮
我想其他按钮会再次加载页面
<host> / <context path>/ <servlet>