//引用json对格式转换
<script src="https://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.min.js"></script>
前端测试代码
function testAjax(){
var url = '/reins/checkback.do?actionType=testAjax&time=' + new Date().getTime();
var x = "中国水水水思考卡卡卡啦啦啦股份有限公司";
var data = "userName="+ escape(escape(x)) +"&checkbacknumber=" + escape(escape('456测试'));
var xmlhttp ="";
try {
xmlhttp=new XMLHttpRequest();
} catch(e) {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("post",url,true);
//文章:https://blog.youkuaiyun.com/bobozai86/article/details/82502954
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.cache=false;
xmlhttp.send(data);
xmlhttp.contentType="application/json";
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
var data = JSON.parse(xmlhttp.responseText);
// var data = eval("(" + xmlhttp.responseText + ")");
console.log(data);
console.log(data.data[0] + "--" + data.data[1]);
console.log(data.msg);
console.log(data.userName);
alert(data.msg);
}
}
}
后端代码
/**
* 测试ajax 乱码问题
* @param request
* @param response
* @throws Exception
*/
public void testAjax(HttpServletRequest request, HttpServletResponse response) throws Exception {
//request.setCharacterEncoding("UTF-8");
//response.setContentType("text/html;charset=UTF-8");
response.setContentType("application/json; charset=UTF-8");
String checkbacknumber = request.getParameter("checkbacknumber");
String userName= request.getParameter("userName");
if(StringUtils.isNotBlank(checkbacknumber) && StringUtils.isNotBlank(userName)){
checkbacknumber = unescape(checkbacknumber);
userName= unescape(userName);
}
ArrayList<String> list = new ArrayList<>();
list.add("123456");
list.add("success");
JSONObject jsonObject=new JSONObject();
jsonObject.put("msg", "操作成功");
jsonObject.put("data", list);
jsonObject.put("userName", userName);
jsonObject.put("checkbacknumber", checkbacknumber);
String data = JSONObject.toJSONString(jsonObject);
PrintWriter out = response.getWriter();
out.print(data);
out.flush();
out.close();
}
主要转换方法
/** * 主要方法unescape * @param src * @return */ public static String unescape(String src) { if (src == null) { return null; } StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length()); int lastPos = 0, pos = 0; char ch; while (lastPos < src.length()) { pos = src.indexOf("%", lastPos); if (pos == lastPos) { if (src.charAt(pos + 1) == 'u') { ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16); tmp.append(ch); lastPos = pos + 6; } else if (src.charAt(pos + 1) == ' ' || src.charAt(pos + 1) == ';') { tmp.append(src.substring(pos, pos + 1)); lastPos = pos + 1; } else { ch = (char) Integer.parseInt( src.substring(pos + 1, pos + 3), 16); tmp.append(ch); lastPos = pos + 3; } } else { if (pos == -1) { tmp.append(src.substring(lastPos)); lastPos = src.length(); } else { tmp.append(src.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); }/** * 实现escape方法 * @param src * @return */ public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length() * 6); for (i = 0; i < src.length(); i++) { j = src.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256) { tmp.append("%"); if (j < 16){ tmp.append("0"); } tmp.append(Integer.toString(j, 16)); } else { tmp.append("%u"); tmp.append(Integer.toString(j, 16)); } } return tmp.toString(); }