解决方案 »

  1.   

    不要引号试试,Java代码中json=""改成json="{}"
      

  2.   

    在js里面直接拿不到吧,在你的html标签里面写一个input标签专门用来取你后台传过来的json字符串,可以让它在页面加载的时候hide,然后在页面onload的时候再通过id去取你这个input中放的json~试试~
      

  3.   

    试试var data=<s:property value="json" escapeHtml="false"/>;  
      

  4.   

    后台java部分返回的编码应该是正确的,也不是前后台字符编码一致性问题。
    我觉得问题主要是处在LZ错误的使用了s:properties这个标签。这个struct 2的标签应该是在HTML正文 -- 如<td><s:properties ...></td>
    或者HTML的Tag的标签的属性部分 -- 如<input type="text" value=<s:properties...> >
    使用的,所以它会把里面的内容直接用HTML正文的编码方式进行编码:如把双引号"替换为&quot,
    把非Ascii的字符如汉字,用&#字符的Unicode码的10进制表示;进行替换--这样替换后的内容,可以显示在任何编码方式的HTML正文中,哪怕这个HTML是用ISO8859-1的方式编码的。而在javaScript片段中,对于字符串是有另外一套编码规则的:
    对于一些需要转义的字符,如双引号",单引号',反斜杠\,以及一些非Ascii码(如中文),
    它是用\u字符的Unicode码的16进制表示方式的4位长串(若不满4位,前面补0)的方式表达的
    (当然若javascript代码中,若使用双引号来括一个字符串,则字符串内容中的单引号可转可不转,反之亦然)所以嘛,LZ要么直接把这个字符串用s:property嵌入到HTML正文中,要么另外找一个方法将它编码成javascript能认识的字符串模式
      

  5.   

    弄一个隐藏元素,把data赋值给这个隐藏元素的html。
    然后在取出这个隐藏元素的html,然后用JSON.parse(html);获得data对象
    var $span=$('<span type="display:none;"></span>');
    $span.html("{&quot;id&quot;:1}");
    console.log(JSON.parse($span.html()));
      

  6.   

    这个分两种情况,就是看你是不是非得在javascript中直接引用变量。
    如果这个变量只是在页面提交时刷新一次的话,那么LZ可以按照4L的方法,先用一个input来接收这个变量,然后再在javascript中直接引用这个input控件的value属性。如果因为种种原因(比方说这个json是一个Ajax的返回),不能用上述方法的话,就得自己编程实现了:
    写一个静态java方法(譬方说叫Test.convert(String s)),对于键盘上的所有键,除了换行,反斜杠,单引号,双引号,Tab键之外,保持原状不变,对于其它键,包括非英文字符,统一转成\uxxxx这样的十六进制形式,然后在你的接收参数的部分
    var data = "<s:property value='jsonp'/>";
    不要用struct标签,直接从request中取参数并用你刚才写的转换方法
    var data = "<%=Test.convert(request.getParameter("jsonp"))%>";
    就行了
      

  7.   

    完全可以直接 打开页面 ajax 请求 返回json数据
      

  8.   

    <s:property/>标签帮你做了HTML转义,把"转义成了&quot;,你可以不用这个<s:property/>标签,而是用最原始的var data = "<%=jsonp%>";或者如6楼所说escapeHtml="false"
      

  9.   

    楼主,你对json还是不太理解,你在看下json的使用吧!我在js中调用有问题