js接收json数据问题

后台代码:
JSONObject json=new JSONObject();
json.put("temp1", "aaa");
json.put("temp2", "bbb");
setJson(json);

前台js:
<br> var json=&quot;<s:property value='json'/>&quot;;<br> alert(json);</p> <pre><code>&lt;/script&gt; </code></pre> <p>在html里直接写<s:property value='json'/>显示的是{&quot;temp1&quot;:&quot;aaa&quot;,&quot;temp2&quot;:&quot;bbb&quot;}</p> <p>js打印的时候却是{&quot;temp1&quot;:&quot;aaa&quot;,&quot;temp2&quot;:&quot;bbb&quot;} </p> <p>这个是什么 问题呢?<br> 怎么解决?</p>

11个回答

我是在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]这个吗?如果是的话,这不叫乱码!

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!