GET請求不亂碼,Ajax請求POST亂碼問題
阿新 • • 發佈:2018-11-10
在寫公眾號介面前後端互動的時候,使用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。
理解還是不夠透徹,一般情況下是不亂的,有時候可能瀏覽器抽風==,如果亂的話就需要轉一下。
以此做下筆記。