日期:2014-05-16  浏览次数:20735 次

JQuery .ajax异步请求
通过一个按钮想测试下AJAX及JSON

前端代码段如下:
HTML code

<script type="text/javascript">

    $(document).ready(function(){
        $("#btncheck").click(function(){
            var userdata=
            {
                "users":
                [
                    {"name":"user1", "sex":"m", "age":"20"},
                    {"name":"user2", "sex":"f", "age":"21"}
                ]
            };
            
            var user = JSON.stringify(userdata);
            $.ajax({
            url: '/webtemplate/site.ajax.json.do?method=validate',
            type: 'post',
            data: 'user=' + user,
            dataType: 'json',
            timeout: 1000,
            error: function()
            {
                alert('Error!');
            },
            success: function(result)
            {
                alert(result);
            }
            });
        });
    });

</script>

</head>

<body>
<form action="#" method="post">
  <input type="button" id="btncheck">JQueryJson测试</input>
</form>
</body>
</html>



后端代码片段为:

Java code
public ActionForward validate(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        String myJson = request.getParameter("user");
    
        // 转化为JSON对象
        JSONObject json = new JSONObject(myJson);
        
        // 获取对应的数组
        JSONArray array = json.getJSONArray("users");
        for (int i = 0; i < array.length(); i++)         
        {
            // 获取对应数组的每一个对象
            JSONObject thisJson = (JSONObject) array.get(i);
            log.info(thisJson.get("name") + " - " + thisJson.get("sex") + " - " + thisJson.get("age"));
        }
        
        String book = "{'name':'chinese','publish':'china','price':30}";
        JSONObject.fromObject(book);
        response.setContentType("application/x-json");
        PrintWriter out = response.getWriter(); 
        out.println(book.toString());
        out.flush(); 
        out.close();
        
        return null;
    }


点击页面的测试按钮时,可以看到后台有日志输出:

2012-05-28 16:55:24 734 INFO JsonAction:78 - user1 - m - 25
2012-05-28 16:55:24 734 INFO JsonAction:78 - user2 - f - 21


可是前端貌似没能收到后端返回的JSON对象,因为总提示失败时的方法信息 Error!


大家帮忙看看哈

------解决方案--------------------
这个时候你应该借组火狐的firebug,客户端返回什么数据都可以看到的。
至于你这里,貌似在服务器端,你返回的东西是不是错了哦。JSONObject.fromObject(book);应该是返回的这个转换之后的结果吧?你直接返回字符串,java中'是要加上\的,\'这样才正确。
------解决方案--------------------
严格的json要求用双引号来包裹键值
比如
{"name": "Tom"}
------解决方案--------------------
可能是json的格式问题。
你也可以先返回一个简单的字符串试试,看看行不行。
------解决方案--------------------
可能是json的格式问题。
你可以先返回一个简单的字符串试试看,如果可以的话,说明是json的写法有问题。
------解决方案--------------------
json格式问题 你试试

var userdata=[{"name":"user1", "sex":"m", "age":"20"},
{"name":"user2", "sex":"f", "age":"21"}];