这些天我正在学习Jquery,并对提交数据表示怀疑。让我们考虑下面的例子
JSP:
<body>
<form name="newForm" id="newForm" action="getData" method="get">
<input type="name"/>
<input type="button" onclick="submit()"/>
</form>
</body>
JS:
function submit(){
document.getElementById("newForm").submit();
}
的Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String x = request.getParameter("name");
system.out.println("Received name is "+ x);
}
当我运行上述程序时,控制台会正确打印值。
我使用Jquery运行相同的代码,如下所示。
$(document).ready(function() {
$("form1").submit(function() {
$.ajax({
type : "get",
url : "getData",
success : function(msg) {
$('#header').append("Hi");
}
});
return false;
});
});
没有任何反应。在这里,我的问题是,我是否必须在data
中发送名称,或者它可以像在JavaScript中那样工作,即如果不发送参数,它会选择数据吗?
简单来说,要通过Ajax / Jquery调用从Servlet中的JSP获取参数,我需要强制发送data
中的参数。
由于
答案 0 :(得分:1)
标准表单submit()方法只需通过浏览器提交表单 - 与单击没有点击事件绑定的按钮相同,因此它不会异步提交表单。
对于您的JQuery示例,您需要将“submit”事件绑定到表单,以防止它的默认行为并异步提交表单。
为了在请求中传递与第一个示例相同的数据,您还需要序列化表单。
例如:
$(document).ready(function() {
$("#newForm").on('submit', function(e){
$.ajax({
type: "get",
url: "getData",
data: $(this).serialize(),
success: function(msg) {
$('header').append("Hi");
}
});
e.preventDefault();
}).submit();
});
答案 1 :(得分:0)
您必须在name
代码中指定<input>
属性(您还需要指定type
属性):
<input type="text" name="name"/>
之后,您将能够在servlet中获取此参数:
String x = request.getParameter("name");
如果没有这个,你的第一个例子也行不通:
Received name is null