后台查到数据为{"re":"kan","userid":588,"unprocnum":4,"unprocmakupnum":2}
将数据转为json
jsons = JSONObject.fromObject(opencallUser);
return SUCCESS;xml配置:
<action name="searchOpencallUser" class="com.smartcoms.web.action.OpenCallUserAction">
<result name="success" type="json"/>
</action>前台:$.ajax({   
            cache:false,
            type : "get",
url :"<%= request.getContextPath() %>"+"/json/searchOpencallUser.action",
datatype : "json",
success : function(data){ 
        var json = eval("("+data+")");
$('#unProcnum').text(json.);
}
       });  
SyntaxError: missing ] after element list
[在此错误处中断]  ([object Object])
var json = eval("("+data+")");解析失败。data是否拿到后台传递的值?
求各位大能解决。

解决方案 »

  1.   

    楼主 你搞混淆了,,其实有两种方案的,
    第一种:
    为你的 opencallUser变量加上 get方法。然后 在配置的xml中的package中 extends="json-default",然后再在对应的action中配置result,这样子:<result type="json"></result>。
    然后再回调函数中接收的参数就不用再 重新运算求出参数的内容,即 var json = eval("("+data+")"); 这步可以不用写了,struts2已经帮你做好了。
    第二种:就和你写的差不多,只不过 ,action应该return null,然后把对应的 配置去掉。就可以了 。。
    我又发现个问题 :
    datatype : "json",
    你的dataType 的t是不是应该大写 ,,我不知道 没试过,你试试看。。Good luck~~
      

  2.   

    第一种方法:
    opencallUser是一个对象。  有get,set方法。   xml也继承了json-default。
    action中opencallUser转为json输出数据{"re":"kan","userid":588,"unprocnum":4,"unprocmakupnum":2}
    前台alert(data.re)为undefined。确定是后台值没有响应到前台。  可具体哪儿有问题找不出。
      

  3.   

    返回的data为undefined ,那说明 参数都没有传进来啊。肯定是哪里写错 。你alert(data)试试。。先写个最简单的试试~~
      

  4.   

    alert(data)是Object object。   具体取里面的属性。  就是undefined。
      

  5.   

    response.getWriter().write(JsonUtil.getJson())
    return null; 用这个转一下看看
      

  6.   

    var json = eval("("+data+")"); 改为单引号 试试
      

  7.   

    action name="searchOpencallUser" class="com.smartcoms.web.action.OpenCallUserAction">
    <result name="success" type="json">
    <param name="includeProperties">你传递参数的名字</param>
    </result>
    </action
      

  8.   

    你firebug 一下,看看请求对不对?到底请求过去了没?
      

  9.   

    楼主,你用工具看看你的request过去收到服务端的response了没,如果收到了服务端数据,那就是你解析数据时出错了~~~这种问题很好测的吧
      

  10.   

    lz前台拿到数据收for in看下,里面是什么。我感觉返回的并不是lz返回的json数据。如果要是这样的话lz看下struts2整合json的配置
      

  11.   

    拿值问题已经解决。  是楼主我搞混淆了。  struts2在xml中配置json时本身就会处理的。  所以没必要转action中没必要转json格式。   转了之后,在前台得要data.opencallUser或data.json才能拿到。现在伴随着一个新的问题。  就是刚进页面无值显示,自动刷新后就有值了。
    var BREAKTIME = 300000; //5分钟刷新一次 
    var timeId = null;
    $(document).ready(function(){
    summaryOpencallUserByState();   
    }); 

    function summaryOpencallUserByState(){
    $.ajax({   
                cache:false,
    async: false,
                type : "get",
    url :"<%= request.getContextPath() %>"+"/json/searchOpencallUser.action",
    datatype : "json",
    success : function(data){ 
    console.log(data);
    $("#unProcnum").text(data.opencallUser.unprocnum);
    $("#unProcmakupnum").text(data.opencallUser.unprocmakupnum);
    }
           });  
           if(timeId != null && timeId != "undefined"){
    window.clearTimeout(timeId);
    }
           timeId = window.setTimeout("summaryOpencallUserByState()",BREAKTIME);
    }

    $(document).unload(function(){
        if(timeId != null && timeId != "undefined"){
    window.clearTimeout(timeId);
    }
    });
      

  12.   

    对啊,怎么是return SUCCESS的??
      

  13.   

    刚进页面无值显示,自动刷新后就有值了。我跟你说 我也遇到了 ,在做手机版网站的时候 ,点击过来 不进入ajax,手动刷新又可以但是电脑版没出现过,代码是一样的,,,手机版的为什么会出现这问题 目前不知道,知道了在告诉你~~
      

  14.   


    我知道我的问题所在了, 在手机浏览器中的a标签默认打开方式不是_self,而是以#开头的方式跳转,导致js失效。。在a标签中 加上 target="_self"就可以了 。。呵呵  你的解决了吗