你这样做有点困难。当然有更简单的方法可以做到这一点。只需作为普通请求参数发送,而不是作为 JSON 发送。您可以使用jQuery.serialize() 将所有表单字段收集为参数。以下是 JSP 的外观示例:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$('#form').submit(function() {
$form = $(this);
$.post($form.attr('action'), $form.serialize(), function(response) {
alert(response); // "OK"
});
return false;
});
});
</script>
</head>
<body>
<form id="form" action="register" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
下面是侦听url-pattern 或/register/* 的servlet 的样子:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username + "," + password);
response.getWriter().write("OK"); // You can write JSON string here.
}
使用jQuery form 插件会更加透明。
$(document).ready(function() {
$('#form').ajaxForm(function(response) {
alert(response); // "OK"
});
});
要从 servlet 响应 jQuery,如果返回真正的 JSON 数据会更容易。例如:
Map<String, Object> data = new HashMap<String, Object>();
if (userDAO.exist(username)) {
data.put("success", false);
data.put("message", "Username in use, please choose another");
} else {
userDAO.create(username, password);
data.put("success", true);
data.put("message", "User successfully registered");
}
response.setContentType("application/json");
response.getWriter().write(new Gson().toJson(data)); // Gson = Google Gson.
然后在 jQuery 中:
$(document).ready(function() {
$('#form').ajaxForm(function(data) {
$('#message').addClass(data.success ? 'success' : 'error').text(data.message).show();
});
});