jquery $.ajax dataType设置为json后还是无法解析

图片说明图片说明
如图,我在后台传了一个json String到前台,为什么在前台ajax中设置了dataType为json后还是没用,data.success输出为undefined,但是我用eval()方法处理后却可以得到data.success的值图片说明

ajaxMessage图片说明

我找到原因了,是因为在spring-mvc.xml里面配置了这个图片说明
如果注释掉就可以自动转化了。
有没有大神能告诉哦我,这是为什么啊。。。。
还有,注释掉以后返回的json出现了中文都变成问号了,这怎么办啊。。。

请参考:
http://www.2cto.com/kf/201403/289356.html
http://bujuyige.iteye.com/blog/722028

Map map=new HashMap();
String msg="验证码错误!";
boolean success=true;
map.put("mas",msg);
map.put("success",success);
response.getWrite().write(JSONObject.fromObject(map).toString);
你用这种的返回方式 ,然后直接data.msg;就能接收了。dataType:"json";

后台要返回一个对象,不要返回一个字符串,你现在返回的是一个JSON的字符串,你收到字符串之后,在前台要把这个JSON字符串转成JSON对象,才能从对象中拿属性。你从字符串拿属性肯定是undefined。

    HttpServletResponse objResponse = request.getHttpServletResponse();
    objResponse.setContentType("text/html;charset=GBK");
    PrintWriter objWrite = null;
    try {
       objWrite = objResponse.getWriter();
       objWrite.write("需要传输的json字符串");
       objWrite.flush();
    } catch (IOException e) {
      throw new RuntimeException("响应失败。");
    } finally {
      if (objWrite != null) {
         objWrite.close();
      }
    }

用这种响应流的方式往前台传输,会自动转成JSON对象吧

我发现能够直接 data.属性名访问的情况,服务器端代码一定是直接renturn的一个常量字符串。 常量字符串就是指直接用“”组成的字符串,没有定义String 变量直接把一串“”print到前台的情况,就可以直接data.属性名访问,而且jquery端只要写success就可以拿到。 但是如果服务器端向外print的时候是一个String对象,那就必须得手动解析才可以,因为jquery对接送格式有着很严格的要求,还有,eval()方法有风险。可看这篇博客 http://blog.csdn.net/qq_31655965/article/details/52037197