HTMLfrom提交表单
Posted 波子汽水yeah
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTMLfrom提交表单相关的知识,希望对你有一定的参考价值。
表单对象serializeArray出来的是一个数组,并且是 name:value这种形式,不是后台接对象的格式。需要转一下。数组问题后台用了一个list接收
之前项目里面是自己组装的对象,自己写的小demo不想这么麻烦直接用 from提交的。发现一些问题
springboot项目 @RequestBody 注解接收的时候 jackson序列化时要引入的包
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.3</version>
</dependency>
前段代码 抄了网上一个小样
//将表单序列化成json格式的数据(但不适用于含有控件的表单,例如复选框、多选的select)
(function($){
$.fn.serializeJson = function(){
var jsonData1 = {};
var serializeArray = this.serializeArray();
// 先转换成{"id": ["12","14"], "name": ["aaa","bbb"], "pwd":["pwd1","pwd2"]}这种形式
$(serializeArray).each(function () {
if (jsonData1[this.name]) {
if ($.isArray(jsonData1[this.name])) {
jsonData1[this.name].push(this.value);
} else {
jsonData1[this.name] = [jsonData1[this.name], this.value];
}
} else {
jsonData1[this.name] = this.value;
}
});
// 再转成[{"id": "12", "name": "aaa", "pwd":"pwd1"},{"id": "14", "name": "bb", "pwd":"pwd2"}]的形式
var vCount = 0;
// 计算json内部的数组最大长度
for(var item in jsonData1){
var tmp = $.isArray(jsonData1[item]) ? jsonData1[item].length : 1;
vCount = (tmp > vCount) ? tmp : vCount;
}
if(vCount > 1) {
var jsonData2 = new Array();
for(var i = 0; i < vCount; i++){
var jsonObj = {};
for(var item in jsonData1) {
jsonObj[item] = jsonData1[item][i];
}
jsonData2.push(jsonObj);
}
return JSON.stringify(jsonData2);
}else{
return "[" + JSON.stringify(jsonData1) + "]";
}
};
})(jQuery);
// 提交
$('#add_medi').click(function() {
//这里得到的对象是name:value 这种形式,不是后台接收对象
// var t = $('#addMedi').serializeArray();
// 用下面自定义方法转了一下
var t = $("#addMedi").serializeJson();
console.log(t)
console.log(JSON.stringify(t))
$.ajax({
type:"post",
url:"medi/add",
dateType:"json",
contentType: "application/json;charset=UTF-8",
data:t,
success:function(result){
console.log(result);
// 重新加载数据,即重新请求数据,并加载
console.log(app.userList);
// data:JSON.stringify(this.queryParam),
// 因为对象是不能在网络中传输的,(Json对象也是对象),所以这里要将json对象转换成json字符串
// 然后再传输,后台的springmvc的@RequesyBody会将json字符串再转换成对象
//这个地方尤其要注意一定要指定contentType的值为『"application/json"』 ,因为此处@RequestBody接受的是一个通过json转换的对象
//如果不设置,默认为text/html,那么是支持该种类型的,会报415错误
}
});
});
手动组装表单数据 带上传文件
function fabuAny() {
//loading带文字
layer.open({
type: 2
, content: '矮泥鸭~'
});
var noteMail = $('#noteMail').is(":checked");
var myform = new FormData();
var url = 'ss/savess';
//var txtvalue = $("#everyDay").val();
var txtvalue = editor.txt.html();
console.log(txtvalue);
// myform.append('files',filesArr); //不能这么传的
for (var i = 0; i < filesArr.length; i++) {
myform.append("files", filesArr[i]);
}
myform.append("content", txtvalue);
myform.append("noteMail", noteMail);
console.log("上传文件列表", myform);
$.ajax({
type: "post",
// dataType: "json",
url: url,
//data:JSON.stringify(params),
data: myform,
// contentType:'application/json',
contentType: false,
processData: false,
success: function (data) { //后台必须返回json格式的这里才会执行success
//关闭load层
layer.closeAll();
console.log(data);
data = JSON.parse(data);
console.log(data.success)
if (data.success) {
layer.open({
content: '发布成功'
, skin: 'msg'
, time: 3 //2秒后自动关闭
});
location.reload();
} else {
layer.open({
content: data.msg
, skin: 'msg'
, time: 3 //2秒后自动关闭
});
}
}
});
}
以上是关于HTMLfrom提交表单的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot中表单提交报错“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“(代码片段