我点击打开easyUI的dialog窗口时,后台接收的数据全部为null;但我直接使用jq的打开窗口并传输数据,后台都能获取到。我看网上有人说使用了dialog文档结构改变了,找不到对应的from?该怎么改啊
js部分
<script type="text/javascript">
/* 显示addDiv */
function addDiv() {
$("#addTab").dialog({
title : '新增',
width : 600,
height : 400,
modal : true
})
$("#addTab").dialog("open");
}
/* 提交新增 */
function add() {
var $dialog = $("#addDiv");
var $form = $dialog.find("form[name=addForm]");
var formData = new FormData($form[0]);
console.log($form);
console.log(formData);
$.ajax({
url : basePath + "/goodsAdd.json",
type : "post",
dataType : "json",
data :formData,
processData : false,
cache : false,
contentType : false,
success : function(data) {
if (data.num == 1) {
$.messager.alert('提示', "新增成功");
$("#datag").datagrid("reload");
} else {
$.messager.alert('提示', "新增失败");
}
}
});
}
</script>
HTML部分
<body>
<div id="addDiv" >
<form name="addForm" method="post" enctype="multipart/form-data">
<table id="addTab">
<tr>
<td>商品名称:<input id="goodsname1" class="easyui-textbox" name="goodsname" style="width: 150px"></td>
<td>商品价格:<input id="goodsprice1" class="easyui-numberbox" name="goodsprice" data-options="validType:'goodsprice',required:true" style="width: 150px"></td>
</tr>
<tr>
<td>保质 期:<input id="releasedate1" class="easyui-numberbox" name="releasedate" data-options="validType:'releasedate',required:true" style="width: 150px"></td>
<td>生产日期:<input id="creationdate1" class="easyui-datetimebox" name="creationdate" data-options="validType:'creationdate',required:true" style="width: 150px"></td>
</tr>
<tr>
<td>产  地:<input id="producingarea1" class="easyui-textbox" name="producingarea" data-options="validType:'producingarea',required:true" style="width: 150px"></td>
<td>商品类型:<input id="goodstype1" class="easyui-textbox" name="goodstype" data-options="validType:'goodstype',required:true" style="width: 150px"></td>
</tr>
<tr>
<td>商品信息:<input id="goodsinfo1" class="easyui-textbox" name="goodsinfo" data-options="validType:'goodsinfo',required:true" style="width: 150px"></td>
</tr>
<tr>
<td colspan="2">
<div style="width: 100%; text-align: center;">
<img id="defaultImage" style="width: 250px; height: 150px; display: inline-block;" alt="默认商品" src="../../view/images/goods/wallhaven-2e3839.jpg">
</div>
</td>
</tr>
<tr>
<td colspan="2">
<div style="width: 100%; text-align: center;">
<input name="upImage" class="easyui-filebox" style="width: 300px" data-options="buttonText:'选择文件',onChange:showImage">
</div>
</td>
<td>
<input type="hidden" id="goodsimagename" name="goodsimagename" value="wallhaven-2e3839">
<input type="hidden" id="goodssuffix" name="goodssuffix" value="jpg">
<input type="hidden" id="goodsimagetype" name="goodsimagetype" value="image/jpg"> <input type="hidden" id="goodsimagesize" name="goodsimagesize" value="8888"></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-add',onClick:add">提交</a></td>
</tr>
</table>
</form>
</div>
</body>
参照下,下面是三种提交方式
// 第一种form表单提交
$("#uploadForm").attr("action",getContext() + "/add");
$("#uploadForm").submit();
// 第2种ajax做法
var form = document.getElementById('uploadForm');
var formData = new FormData(form); //重点:要用这种方法接收表单的参数
$.ajax({
url : getContext() + "/add",
type : 'POST',
data : formData,
// 告诉jQuery不要去处理发送的数据
processData : false,
// 告诉jQuery不要去设置Content-Type请求头
contentType : false,
async : false,
success : function(d) {
console.log(d);
}
});
// 第3种ajax做法
var formData = new FormData();
var image = $('#ad_image')[0].files[0];
var androidUrl = $('#androidUrl').val();
var iosUrl = $('#iosUrl').val();
formData.append("file",image);
formData.append("androidUrl",$("#androidUrl").val());
formData.append("iosUrl",$("#iosUrl").val());
$.ajax({
url : getContext() + "/compManage/advertisementRelease/add",
type:'POST',
data:formData,
processData : false,
contentType : false,
async : false,
xhrFields: {
// 跨域
withCredentials: true
},
dataType : "json",
success:function(data){
if (data.errorCode == "success") {
}
}
});
}
我找到问题了,需要在div里面引用easyui,然后创建窗口的时候打开div而不是table,这样序列化的时候文档结构就不会变化