小小鱼来喽
2017-03-17 07:44
采纳率: 55.6%
浏览 2.8k

jsonp返回的数据中的汉字在浏览器中是问号

前端js代码:
$.ajax({
url: "http://176.1.19.64:8081/engine/config/" + treeNode.id + ".do?callback=?",
type: "get",
dataType: "jsonp",
scriptCharset: "UTF-8",
jsonpCallback:"successCallback",
data: null,
async: false,
timeout: $.config.ajax.timeout,
success: function (json) {

var reportConfig = JSON.parse(json.reportConfig);
console.log(reportConfig);
$.databrowser.addTab(reportConfig);
}
});
服务端代码:
@RequestMapping(value = WebUrls.URL_CONFIG)
public
@ResponseBody
String getReportConfig(@PathVariable String nodeId, HttpServletRequest request, HttpServletResponse response) {
DynamicRequestParams params = new DynamicRequestParams(request);
String result = "";
try {
result = JsonUtil.objectToJsonStr(engineService.getReportConfig(nodeId));
} catch (MapperException e) {
logger.info(e.getMessage());
e.printStackTrace();
}
try {
String callback = params.get("callback").toString();
JSONObject jsonObject = new JSONObject();
jsonObject.put("reportConfig",result);
result = callback + "(" + jsonObject.toString() + ")";
} catch (Exception e) {
logger.info(e.getMessage());
e.printStackTrace();
}
logger.info("success");
try {
result = new String (result.getBytes("utf-8"),"utf-8");
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage(),e);
e.printStackTrace();
}
logger.info(result);
try {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage(),e);
e.printStackTrace();
}
//response.setContentType("text/plain;charset=ISO-8859-1");

    return result;
}

chrome调试显示的网络信息:
General
Request URL:http://176.1.1.167:8080/engine/config/30000102.do? callback=successCallback&_=1489735733373
Request Method:GET
Status Code:200
Remote Address:176.1.1.167:8080
Response Headers
view source
Content-Length:58893
Content-Type:text/plain;charset=ISO-8859-1
Date:Fri, 17 Mar 2017 07:29:00 GMT
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:176.1.1.167:8080
Pragma:no-cache
Referer:http://176.1.19.64:8081/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Query String Parameters
view source
view URL encoded
callback:successCallback
_:1489735733373

返回的数据片段:
successCallback({"reportConfig":"{\"columnMaxNum\":3,\"id\":\"30000102\",\"rowMaxNum\":3,\"showBlock\":false,\"title\":\"????????\",

现在就是这个问号,不知道怎么处理。查了好多方法,不成功。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 小小鱼来喽 2017-03-17 15:54
    已采纳

    问题解决了,采用的

    response.getWriter.print(text);

    response.getWriter.close();

    这两句即可,不需要在Tomcat中设置,Tomcat中的设置应该只是针对传到后台的数据的编码的,http的response还是需要自己指定的。

    今天看了一天这个问题,终于解决了,十分开心。

    明天可以好好玩了。

    点赞 评论
  • 你直接浏览器访问接口看输出的数据乱码没有,jsonp其实和浏览器直接访问一样的

    而且看你响应头是Content-Type:text/plain;charset=ISO-8859-1编码和你scriptCharset指定的不一样utf-8,最好服务器设置好来成utf-8的,视乎你服务器也没有正常设置响应头编码,自己检查下

    点赞 评论

相关推荐 更多相似问题