【发布时间】:2020-07-12 07:45:57
【问题描述】:
我做了一个jsp页面,在第一个下拉列表的变化中,第二个下拉列表的值必须相应地改变。
两个下拉菜单的值都是从数据库中获取的。
正在获取第二个下拉列表的值,因为第一个下拉列表的值是该表中的外键。
使用下拉菜单 1 的 onchange 事件,我正在调用 js 函数并将其传递给 servlet 以执行该函数。
我对这个概念很陌生,我确信我在我的 servlet 代码中犯了错误。 我也使用了 firefox 检查,据它说,facno 正在被转移到 servlet,但是那里没有响应,这就是为什么一旦第一个下拉列表的值发生变化,第二个下拉列表就会变空。 请帮我解决同样的问题。
JAVASCRIPT 代码:
function Fill() {
var facno = document.getElementById("facname").value;
var xhttp = new XMLHttpRequest();
xhttp.overrideMimeType("text/html;charset=UTF-8");
xhttp.onreadystatechange = function() {
if (xhttp.readyState === 4 && xhttp.status === 200) {
document.getElementById("subname").innerHTML = xhttp.responseText;
}
};
xhttp.open("POST", "DropFill?facnoajax=" + facno, true);
xhttp.send();
}
JSP 代码:
下拉菜单 1:
<%
Connection con = null;
con = DBConnection.createConnection();
PreparedStatement ps = null;
try {
String sql = "SELECT fac_no, fac_name FROM faculty_info";
ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
%>
<div class="form-group row">
<label class="col-form-label col-md-3" for="facname">Faculty:</label>
<div class="col-md-4">
<select name="facname" id="facname" class="form-control"
onchange="Fill()" required>
<option value="" selected>Choose any:</option>
<%
while (rs.next()) {
String facname = rs.getString("fac_name");
String facno = rs.getString("fac_no");
%>
<option value="<%=facno%>"><%=facname%></option>
<%
}
%>
</select>
</div>
</div>
<%
} catch (SQLException sqe) {
out.println(sqe);
}
%>
下拉 2:
<div class="form-group row" id="dd2">
<label class="col-form-label col-md-3" for="subname">Subject:</label>
<div class="col-md-4">
<select id="subname" name="subname" class="form-control" required>
<option value="" selected>Choose any:</option>
</select>
</div>
</div>
服务代码:
public class DropFill extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DropFill() {
super();
// TODO Auto-generated constructor stub
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
ArrayList<String> subname = new ArrayList<String>();
ArrayList<String> subno = new ArrayList<String>();
Connection con = null;
con = DBConnection.createConnection();
PreparedStatement ps = null;
String facno = request.getParameter("facnoajax");
try {
String sql = "SELECT sub_name FROM subject_info WHERE fac_no='" + facno + "'";
ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
subname.add(rs.getString("sub_name"));
subno.add(rs.getString("sub_no"));
}
for (int i = 0; i < subname.size(); i++) {
for (int j = 0; j <= subno.size(); j++)
response.getWriter().write("<select> <option value=" + subno.get(j) + ">" + subname.get(i)
+ "</option> </select>");
}
}
catch (SQLException sqe) {
out.println(sqe);
}
}
}
}
【问题讨论】:
-
只需在 catch 块后写
response.getWriter().write("Hi");看看是否会返回,还要检查您的浏览器控制台是否显示任何错误。最后,您在 ajax 中使用了post我认为您需要放置你在doPostservlet 方法中的代码也试试这个看看。 -
@Swati 不起作用,放置代码 dopost 方法时仍然无效。此外,即使在 catch 块之后写入消息 hi 也没有返回。我检查了浏览器控制台,没有错误。网络选项卡显示正在发送带有所需值的 facnoajax。
标签: javascript html ajax servlets