GET请求不乱码,Ajax请求POST乱码问题

      在写公众号界面前后端交互的时候,使用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。
理解还是不够透彻,一般情况下是不乱的,有时候可能浏览器抽风==,如果乱的话就需要转一下。
以此做下笔记。

猜你喜欢

转载自blog.csdn.net/qin_never_give_up/article/details/83146244