我在.jsp中使用Java / Spring。
我在myPage.jsp中的div内部myForm.jsp动态加载表单(表单标签包含),并尝试使用所述数据进行ajax post调用。当我调用jQuery .serialize并打印出数据时,它会变回空白。
但是,如果在myPage.jsp中包含表单标记并只加载输入,那么一切正常。
是否存在动态加载整个表单的问题?
myPage.jsp
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
if(window.attachEvent)
{
window.attachEvent('onload', LoadTable);
} else
{
if(window.onload)
{
var curronload = window.onload;
var newonload = function()
{
curronload();
LoadTable();
};
window.onload = newonload;
} else
{
window.onload = LoadTable;
}
}
$(document).on('click','#myFormSubmit',function()
{
var data = $('#myForm').serialize();
console.log("data " + data);
//data is empty!
return false;
});
function LoadTable()
{
$.get('/url', function(data) {
$('#myForm').append(data);
console.log('Data was fetched.');
});
}
</script>
&#13;
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<body>
<div id='myDiv'>
<!-- myForm.jsp gets loaded here -->
</div>
</body>
</html>
&#13;
myForm.jsp
<form id='myForm' name='config_cache' action='config_cache' method='POST'>
<input id='input1' type="checkbox" name="input1" value="true">
<input id='myFormSubmit' name="submit" type="submit" value="Submit">
</form>
答案 0 :(得分:0)
您的表单正在提交 - 您尚未向其提交任何数据。您表单的唯一输入是未选中的复选框。根据{{3}}
的文档注意:只有&#34;成功控制&#34;被序列化为字符串。没有提交按钮值被序列化,因为表单未使用按钮提交。要使表单元素的值包含在序列化字符串中,该元素必须具有name属性。 复选框和单选按钮(类型为#34;输入&#34;或&#34;复选框&#34;)的值仅在选中时才包含。来自文件选择元素的数据不是序列
用这个替换你的表格并提交。你应该看到:
data someName =这个+是+ a + test&amp; input1 = true
<form id='myForm' name='config_cache' action='config_cache' method='POST'>
<input type="hidden" name="someName" value="This is a test">
<input id='input1' type="checkbox" name="input1" value="true" checked>
<input id='myFormSubmit' name="submit" type="submit" value="Submit">
</form>
答案 1 :(得分:0)
听起来你需要在一个表格中序列化你的复选框,如果没有选中,它将以空值提交。这是javascript表单序列化的常见要求。看看这个处理该要求的jquery插件:
https://github.com/davemaple/jquery-form2json
这样可以将表单序列化为:
{ "input1": null }
答案 2 :(得分:0)
对于动态数据,请使用.appendTo()[https://api.jquery.com/appendTo/]而不是.append()!
我知道它的发音,但是可以正常工作!