后台代码:
JSONObject json=new JSONObject();
json.put("temp1", "aaa");
json.put("temp2", "bbb");
setJson(json);
前台js:
<br> var json="<s:property value='json'/>";<br> alert(json);</p> <pre><code></script> </code></pre> <p>在html里直接写<s:property value='json'/>显示的是{"temp1":"aaa","temp2":"bbb"}</p> <p>js打印的时候却是{"temp1":"aaa","temp2":"bbb"} </p> <p>这个是什么 问题呢?<br> 怎么解决?</p>
我是在struts2上试过的,没问题。你用的是什么版本?
应该是框架给转义了,其实框架输出来的json串就是你看到的转义字符,页面上经过HTML解析显示为正常的,这样做是为了防XSS漏洞,如果有特殊需求,可以调用Java或Javascript的解析函数
调用[color=red]Javascript的解析函数[/color],要么的话就在Java端解析后输出(这样做可能会产生XSS漏洞) :lol:
因为你用的struts2的标签s;property来显示json数据的,默认情况下该标签会对html和javascript进行转义,也就是楼上所说的防止XSS漏洞。
[code="java"]
[/code]
这个标签包含这两个属性,你把它们设为false就可以了。(估计只用escapeJavaScript设置为false就可以了)
[quote]
调用Javascript的解析函数,要么的话就在Java端解析后输出(这样做可能会产生XSS漏洞)
[/quote]
楼主可能指的是调用eval函数。
[quote]加上两个属性就报错了。[/quote]报什么样的错误?
你前台js是怎么加的,贴出来看看。
你写的不对,其实你要是直接使用json转换后的对象,把
[code="java"]
var json="";
[/code]
改为:
[code="java"]
var json=;
[/code]
这样就可以了,escapeJavascript不需要
[quote]
这样子写,刷新两下就报错了。还有就算没有报错还是解决不了{"temp1":"aaa","temp2":"bbb"}
问题,alert(json)的时候还是出现那些乱码。
[/quote]
我测试过,没有你说的问题,而且我全部使用UTF-8编码,也没有乱码问题。
而且alert的结果应该是:[object Object],因为json变量已经是一个js对象,而不是string了。
[quote]
[code="java"]var json=""; [/code]
[/quote]
把标签外面的引号去掉,这样json才能直接返回为一个js对象。
同学,你所说的乱码指什么?是指:[quote]
{"temp1":"aaa","temp2":"bbb"}
[/quote]这个吗?如果是的话,这不叫乱码!
[quote]escapeHtml='false'加上它真的会报错的,不加就没报错[/quote]
注意写法,单引号。直接使用下面这段:[code="java"] var json=; [/code]
看看,是否有问题。还有,确保jsp文件重新编译.