vinegardou
vinegardou
采纳率0%
2011-07-29 14:37 阅读 381
已采纳

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条回答 默认 最新

  • 已采纳
    myali88 myali88 2011-08-03 10:48

    我是在struts2上试过的,没问题。你用的是什么版本?

    点赞 评论 复制链接分享
  • greenbamboo1111 greenbamboo1111 2011-07-29 15:06

    应该是框架给转义了,其实框架输出来的json串就是你看到的转义字符,页面上经过HTML解析显示为正常的,这样做是为了防XSS漏洞,如果有特殊需求,可以调用Java或Javascript的解析函数

    点赞 评论 复制链接分享
  • greenbamboo1111 greenbamboo1111 2011-07-29 15:37

    调用[color=red]Javascript的解析函数[/color],要么的话就在Java端解析后输出(这样做可能会产生XSS漏洞) :lol:

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 09:39

    因为你用的struts2的标签s;property来显示json数据的,默认情况下该标签会对html和javascript进行转义,也就是楼上所说的防止XSS漏洞。
    [code="java"]

    [/code]
    这个标签包含这两个属性,你把它们设为false就可以了。(估计只用escapeJavaScript设置为false就可以了)

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 12:13

    [quote]
    调用Javascript的解析函数,要么的话就在Java端解析后输出(这样做可能会产生XSS漏洞)
    [/quote]
    楼主可能指的是调用eval函数。

    [quote]加上两个属性就报错了。[/quote]报什么样的错误?

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 13:18

    你前台js是怎么加的,贴出来看看。

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 14:35

    你写的不对,其实你要是直接使用json转换后的对象,把
    [code="java"]
    var json="";
    [/code]
    改为:
    [code="java"]
    var json=;
    [/code]
    这样就可以了,escapeJavascript不需要

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 15:11

    [quote]
    这样子写,刷新两下就报错了。还有就算没有报错还是解决不了{"temp1":"aaa","temp2":"bbb"}
    问题,alert(json)的时候还是出现那些乱码。
    [/quote]
    我测试过,没有你说的问题,而且我全部使用UTF-8编码,也没有乱码问题。
    而且alert的结果应该是:[object Object],因为json变量已经是一个js对象,而不是string了。

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 15:44

    [quote]
    [code="java"]var json=""; [/code]
    [/quote]
    把标签外面的引号去掉,这样json才能直接返回为一个js对象。

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-02 16:36

    同学,你所说的乱码指什么?是指:[quote]
    {"temp1":"aaa","temp2":"bbb"}
    [/quote]这个吗?如果是的话,这不叫乱码!

    点赞 评论 复制链接分享
  • myali88 myali88 2011-08-03 10:33

    [quote]escapeHtml='false'加上它真的会报错的,不加就没报错[/quote]
    注意写法,单引号。直接使用下面这段:[code="java"] var json=; [/code]
    看看,是否有问题。还有,确保jsp文件重新编译.

    点赞 评论 复制链接分享

相关推荐