1. 程式人生 > >GET請求不亂碼,Ajax請求POST亂碼問題

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。
理解還是不夠透徹,一般情況下是不亂的,有時候可能瀏覽器抽風==,如果亂的話就需要轉一下。
以此做下筆記。