jquery-- json字符串没有自动包装为 json对象
jquery 的一个坑
页面使用 ajax ,回调函数中获取后端返回的 json 格式数据(ajax 未显式指定返回值类型),后端controller方法标注 @ResponseBody 并返回一个 实例对象。
代码大致如下
1 $.ajax({ 2 type: "POST", 3 url: "xxxxxx", 4 data: "xxxxx=xxxxx", 5 success: function(aaa){ 6 7 alert(aaa.msg); 8 9 } 10 11 })
正常情况下 这里可以访问到 aaa.msg(aaa是后端返回的实例对象,包含一个 msg属性)。
但是alert 显示 undefined,
如果把第7行代码改为 alert(aaa); 则可以显示一个 json格式的字符串。
这表明返回的 aaa 是一个 json字符串 而不是 json对象。如果是json对象 那么alert 显示会是 object object。
关于json字符串 和 json对象 参考:https://bbs.csdn.net/topics/390851792
其中17楼的回答截取部分如下:
json格式的字符串,如果你前端用的是纯js,就要eval一下,但如果有用到jq框架等,它会帮你自动转成json对象,就不用eval了。
注:eval方法不是转json对象的意思,而是将字符串转成可执行的js代码。
如:对于一个字符串“alert('hello world')",eval这个字符串就能执行了。
这表明问题在于 js没有自动将 json字符串 转成 json对象。检查了一下发现 引用的 是 jquery-1.3.2.min.js ,换成 jquery.js (1.9.1版本) 后,代码可以正常弹出 aaa.msg的值了。
还不清楚是 版本原因还是 因为 min的原因~