我试图在servlet中使用ajax调用调用doPost方法,但request.GetParameter(textboxID)返回null值。调用doPost方法但每次都打印为null。下面是我的jsp和servlet。我已经工作了几个星期但还没弄明白什么是错的。任何帮助都非常感谢。
JSP:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script src="/javascript/basic.js"></script>
<script src="javascript/jquery-1.11.1.js"></script>
<script>
$(document).ready(function() {
$("#btnSubmit").click(function(e) {
alert("jquery invoked");
$.ajax({
url : 'myservlet',
type : 'GET',
dataType : 'json',
data : $("form").serialize,
success : function(data) {
if (data.isValid) {
$('#output').html(data.filePath2);
$('#output').slidedown(499);
} else {
alert('Data is not valid!');
}
}
});
return false;
});
});
</script>
<body>
<form>
<input type="text" id="txtFilepath" name="txtFilepath"/> <br>
<input type="Submit" id="btnSubmit" value="Submit">
</form>
<p id="output"/>
</body>
</html>
的servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, Object> map = new HashMap<String, Object>();
// TODO Auto-generated method stub
String filepath = request.getParameter("txtFilepath");
System.out.println(filepath);
map.put("isValid", true);
map.put("filePath2", filepath);
write(response, map);
}
private void write(HttpServletResponse response, Map<String, Object> map)
throws IOException {
// TODO Auto-generated method stub
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(map));
}
答案 0 :(得分:2)
您正在servlet中实现POST并从jQuery ajax调用GET。尝试在javascript函数中使用type:'POST'
代替type:'GET'
。
希望这有帮助!
答案 1 :(得分:1)
您在序列化电话中缺少括号:
data : $("form").serialize()
答案 2 :(得分:1)
将此doGet()
方法添加到您的servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
在jquery中,您应该将此data : $("form").serialize
更正为
data : $("form").serialize()
.serialize()
是一种方法。
最重要的一点是<input type="Submit" id="btnSubmit" value="Submit">
应该是
<input type="Button" id="btnSubmit" value="Submit">
,Button应为Button
类型,而不是Submit
类型。如果类型为Submit
,它将始终失败。
OR
在Ajax调用e.preventDefault()
之前添加以下行,它将取消提交按钮的默认行为。
所以它应该是
$("#btnSubmit").click(function(e) {
e.preventDefault();
alert("jquery invoked");
$.ajax({... Rest of the code