如何使用 ajax 从 servlet 获取数据
How to fetch data from servlet using ajax?
首先,这看起来像是重复的,但我向你保证,我已经尝试了很多问题,但仍然没有得到正确的答案。所以我在这里问这个。
我有一个 HTML 表单,我想从中向 servlet 提交查询并在不同的部门中显示结果。
我的HTML代码主要由以下内容组成:
<form>
<input name="query" id="query" placeholder="Query">
<button id="searchDoc">Search</button>
</form>
<div id="search-results"></div>
我有以下jQuery来处理ajax调用。
$('#searchDoc').click(function() {
var q = $('#query').val();
$.ajax({
url: "QueryServlet",
data: {query:q},
success: function(data) {
alert("data: " + data);
$('#search-results').html(data);
}
});
});
我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 {
}
}
即使我提交了一个有效的查询,div 也不会加载来自 servlet 的数据。数据到达 servlet 并显示在控制台中,但我无法从脚本中检索该数据。
<button>
标签等效于<input type="submit"/>
。如果您在 form
标记中未声明任何 action
属性,则标准操作会导致重新加载网页。这会导致,尽管返回的数据入#search-results
div 中,但您将永远无法看到它们,因为页面会立即重新加载。
您应该通过以下方式停用默认的"提交"按钮:
$('#searchDoc').click(function(e) {
e.preventDefault();
[....]
});
这应该可以解决您的问题!
问题
似乎与上下文路径有关,如果servlet不在上下文根中,则路径应如下所示:-
<host> / <context path>/ <servlet>
谢谢:)
相关文章:
- Ajax-如何获取数据
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 从数据库中获取数据并插入JavaScript变量
- 从单击的行上的列中获取数据
- Solr查询以按日期月份获取数据&年
- React路由器服务器端渲染和ajax获取数据
- 使用JavaScript在IE9中获取数据列表选项
- 从json子数组获取数据
- 使用angularjs中的rest调用通过id获取数据
- 正在从ruby应用程序中的数据库中获取数据
- 如何从servlet获取数据到ajax成功
- 从选择下拉菜单中获取数据
- 异步获取数据使用JavaScript同步获取数据
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- JavaScript-获取数据属性的值返回未定义的值
- 如何从文本区域获取数据并使用javascript进行解密
- 在put方法之前从作用域获取数据
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么