在写公众号界面前后端交互的时候,使用jq向后台controller进行传值。然而去看数据库保存的值==,全是ISO8859-1。然后就开始一个一个测试、比对,从前端界面编码,再到f12,后端编码,甚至于xml配置、tomcat编码全部检查了一遍。可能本人前端还是很渣,对于请求理解不够,足足折磨了两天,最终还是一个网上认识的大牛给我远程解决的。在此,我也感谢帮助过我的人,看来IT圈中是非常友好的。闲话不多说,我的问题的解决办法以及根本问题在此做下笔记,希望也可以帮到别人。
我最初写的请求:
var params =$('#mainForm').serialize();
$.ajax({
type: 'post',
url: "<%=basePath%>/consult/save",
data : params,
dataType : 'json',
success : function(data) {
$.hideLoading();
var success = data.success;
if (success == true) {
$.alert(data.msg, "${CompanyName}", function() {
//跳转页面
window.history.go(-1);
});
} else {
$.toast(data.msg, "forbidden");
}
},
error : function() {
$.hideLoading();
}
});
我反复测试,发现get请求就不会乱码,post传到controller就是ISO8859-1。最终大牛给我修改后的代码:
var params = getFormJson($('#mainForm'));
$.ajax({
type: 'post',
url: "<%=basePath%>/consult/save",
beforeSend: function(xhr) {
xhr.setRequestHeader("Content-Type", "application/json;utf-8");
},
data : JSON.stringify(params),
dataType : 'json',
success : function(data) {
$.hideLoading();
var success = data.success;
if (success == true) {
$.alert(data.msg, "${CompanyName}", function() {
//跳转页面
window.history.go(-1);
});
} else {
$.toast(data.msg, "forbidden");
}
},
error : function() {
$.hideLoading();
}
});
//转换json的方法
function getFormJson(form) {
var o = {};
var a = $(form).serializeArray();
$.each(a, function () {
if (o[this.name
] !== undefined) {
if (!o[this.name
].push) {
o[this.name
] = [o[this.name
]];
}
o[this.name
].push(this.value || '');
} else {
o[this.name
] = this.value || '';
}
});
return o;
}
然后后端controller用@RequestBody接收了一下,搞定。
原因是get请求能够自动转换对象,post请求传到后台变成字符串了,转换了一下json。
理解还是不够透彻,一般情况下是不乱的,有时候可能浏览器抽风==,如果乱的话就需要转一下。
以此做下笔记。