getParamteter 在 ajax 对 java servlet 的调用中无法处理文本元素
getParamteter not working on text element in ajax call to java servlet
您好,我有一个带有提交按钮的名称和密码文本字段。问题是我输入的任何值都不会被 servlet 获取。我不知道问题是在 JQUERY 试图获取 HTML 元素值时还是 servlet 无法从 ajax 调用中获取值。
我有一个打印出 request.getParameters 的 servlet,它一直打印 null。我附上了 html 和 js 代码的相关片段以及 servlet 代码以测试是否正在接收参数。
HTML代码:
<section id="customer_business">
<div class="container">
<div class="row">
<div class="col-sm-6 col-xs-12 customer">
<div class="hover ehover3">
<img class="img-responsive" src="images/p13.jpg"
alt="">
<div class="overlay">
<div class="row">
<div class="col-sm-6 col-xs-12">
<div class="form-group">
<input type="text" id="cus_name"
class="form-control" maxlength="10" placeholder="Full Name" required>
</div>
</div>
<div class="col-sm-6 col-xs-12">
<div class="form-group">
<input id="cus_password"
type="password" class="form-control" maxlength="22"
placeholder="Password" required>
</div>
</div>
</div>
<div class="col-sm-2 col-xs-12">
</div>
<div class="col-sm-8 col-xs-12">
<div class="col-sm-6 col-xs-6">
<a href="custreg.html"><button
id="cus_register" class="info" type="button">Register</button></a>
</div>
<div class="col-sm-6 col-xs-6">
<a href="#"><button id="cus_login"
class="info" type="button">Login</button></a>
</div>
JavaScript 代码(在 document.ready 函数中完成):
$('#cus_login').click(function() {
$.ajax({
url: 'LoginServlet',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
username : $("#cus_name").text(),
pw : $("#cus_password").text(),
method : "customer"
}),
success: function(result) {
var obj = result;
if(result.status == true) {
alert("Success!");
}
else{
alert("Login failure, please check and try again");
}
}
});
});
最后是用于测试是否正在发送值的 servlet 代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet reached successfully");
RequestDispatcher custdispatch =
request.getRequestDispatcher("CustProfile.html");
RequestDispatcher busdispatch =
request.getRequestDispatcher("BusEntry.html");
boolean isValid = false;
String method = request.getParameter("method");
String username = request.getParameter("username");
String pw = request.getParameter("pw");
System.out.println(method + username + pw);
我不断收到 3 个空值。
一定是ajax和servlet之间的问题。如果您查看方法属性,它不是从用户输入或任何 html 元素中获取的,它是硬编码的,但即使是 servlet 中的 returns null。
答案:getVal() 确实是正确的选择。问题不在于从 html 获取的 js。问题是 servlet 没有从 ajax POST 中获取数据。原因是因为数据被设置为 json 但 servlet 无法读取 json 格式所以下面的代码:
JsonObject data = new Gson().fromJson(request.getReader(), JsonObject.class);
String method = data.get("method").getAsString();
String username = data.get("username").getAsString();
String pw = data.get("pw").getAsString();
数据变量是jsonajaxpost参数转换成java对象。
您好,我有一个带有提交按钮的名称和密码文本字段。问题是我输入的任何值都不会被 servlet 获取。我不知道问题是在 JQUERY 试图获取 HTML 元素值时还是 servlet 无法从 ajax 调用中获取值。
我有一个打印出 request.getParameters 的 servlet,它一直打印 null。我附上了 html 和 js 代码的相关片段以及 servlet 代码以测试是否正在接收参数。
HTML代码:
<section id="customer_business">
<div class="container">
<div class="row">
<div class="col-sm-6 col-xs-12 customer">
<div class="hover ehover3">
<img class="img-responsive" src="images/p13.jpg"
alt="">
<div class="overlay">
<div class="row">
<div class="col-sm-6 col-xs-12">
<div class="form-group">
<input type="text" id="cus_name"
class="form-control" maxlength="10" placeholder="Full Name" required>
</div>
</div>
<div class="col-sm-6 col-xs-12">
<div class="form-group">
<input id="cus_password"
type="password" class="form-control" maxlength="22"
placeholder="Password" required>
</div>
</div>
</div>
<div class="col-sm-2 col-xs-12">
</div>
<div class="col-sm-8 col-xs-12">
<div class="col-sm-6 col-xs-6">
<a href="custreg.html"><button
id="cus_register" class="info" type="button">Register</button></a>
</div>
<div class="col-sm-6 col-xs-6">
<a href="#"><button id="cus_login"
class="info" type="button">Login</button></a>
</div>
JavaScript 代码(在 document.ready 函数中完成):
$('#cus_login').click(function() {
$.ajax({
url: 'LoginServlet',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: JSON.stringify({
username : $("#cus_name").text(),
pw : $("#cus_password").text(),
method : "customer"
}),
success: function(result) {
var obj = result;
if(result.status == true) {
alert("Success!");
}
else{
alert("Login failure, please check and try again");
}
}
});
});
最后是用于测试是否正在发送值的 servlet 代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet reached successfully");
RequestDispatcher custdispatch =
request.getRequestDispatcher("CustProfile.html");
RequestDispatcher busdispatch =
request.getRequestDispatcher("BusEntry.html");
boolean isValid = false;
String method = request.getParameter("method");
String username = request.getParameter("username");
String pw = request.getParameter("pw");
System.out.println(method + username + pw);
我不断收到 3 个空值。 一定是ajax和servlet之间的问题。如果您查看方法属性,它不是从用户输入或任何 html 元素中获取的,它是硬编码的,但即使是 servlet 中的 returns null。
答案:getVal() 确实是正确的选择。问题不在于从 html 获取的 js。问题是 servlet 没有从 ajax POST 中获取数据。原因是因为数据被设置为 json 但 servlet 无法读取 json 格式所以下面的代码:
JsonObject data = new Gson().fromJson(request.getReader(), JsonObject.class);
String method = data.get("method").getAsString();
String username = data.get("username").getAsString();
String pw = data.get("pw").getAsString();
数据变量是jsonajaxpost参数转换成java对象。