如图,我在后台传了一个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